- 投稿日:2020-11-20T19:56:27+09:00
【Swift】セルの間に余白を入れたい & 複数の画像の位置を条件によって調整したい
画面構成
セルの構成
背景のUIView
- UIView①を背景と見立てて、上下左右にAutoLayoutをつける
- これにより、セルとセルの間に余白ができる
- また、UIView.layout.cornerRadiusを調整することで角丸にできる
UIViewの中のUIView
- 複数の画像の位置を調整するときは、UIViewのなかに入れ込むのが良い(図ではUIView②のなかにUIView③を入れている)
- この構造を親子関係と言う(図では②が親、③が子)
- UIViewの位置をコードで調整するときは、UIView.frame = CGRect(x: 8, y: 8, width: 45, height: 45)などで調整できる
- CGRectはUIViewの位置をを調整できる
- この関数はAutoLayoutよりも優先されるので、storyboardで設定した制約を上書きしてしまうため、扱いには注意が必要
- パラメーターはx, y, width, height
- 例えばこの記事では、ラベルに代入される値に応じて、赤黄青のViewの位置を変えている
なぜUIViewのなかにいれる?
- UIViewのなかに入れることで、バラバラなViewを1つのグループとしてまとめることができる
- 親子関係になったパーツは位置の基準が親のViewの位置になる
- storyboardから、そのパーツの位置は数字で確認できる
セルの更新について
- 画面が読み込まれたタイミング(viewDidload)では、セルの中身はstoryboardによって決められているので、このままではコードによってセルの内容を制御できない
- これを解消するためには、viewDidAppearと言う関数を用いて、tableの内容をreloadする
hoge.swiftoverride func viewDidAppear(_ animated: Bool) { table.reloadData() }
- viewDidAppearは、全ての画面のレイアウトの処理が正常に終わった後、呼ばれる関数
- viewDidloadとかviewDidAppearは書けば自動的に呼んでくれるが、呼ばれる順番は決まっているので、詳しくはUIViewControllerのライフサイクルを参照
- reloadData()はUITableViewの関数
- セルの内容を更新し、表示する内容を変更したいときはこの関数を呼ぶとUITableViewをリロードして、値を更新してくれる
改めて完成図
- 投稿日:2020-11-20T19:56:27+09:00
【Swift】複数の画像の位置を条件によって調整したい
画面構成
セルの構成
背景のUIView
- UIView①を背景と見立てて、上下左右にAutoLayoutをつける
- これにより、セルとセルの間に余白ができる
- また、UIView.layout.cornerRadiusを調整することで角丸にできる
UIViewの中のUIView
- 複数の画像の位置を調整するときは、UIViewのなかに入れ込むのが良い(図ではUIView②のなかにUIView③を入れている)
- この構造を親子関係と言う(図では②が親、③が子)
- UIViewの位置をコードで調整するときは、UIView.frame = CGRect(x: 8, y: 8, width: 45, height: 45)などで調整できる
- CGRectはUIViewの位置をを調整できる
- この関数はAutoLayoutよりも優先されるので、storyboardで設定した制約を上書きしてしまうため、扱いには注意が必要
- パラメーターはx, y, width, height
- 例えばこの記事では、ラベルに代入される値に応じて、赤黄青のViewの位置を変えている
なぜUIViewのなかにいれる?
- UIViewのなかに入れることで、バラバラなViewを1つのグループとしてまとめることができる
- 親子関係になったパーツは位置の基準が親のViewの位置になる
- storyboardから、そのパーツの位置は数字で確認できる
セルの更新について
- 画面が読み込まれたタイミング(viewDidload)では、セルの中身はstoryboardによって決められているので、このままではコードによってセルの内容を制御できない
- これを解消するためには、viewDidAppearと言う関数を用いて、tableの内容をreloadする
hoge.swiftoverride func viewDidAppear(_ animated: Bool) { table.reloadData() }
- viewDidAppearは、全ての画面のレイアウトの処理が正常に終わった後、呼ばれる関数
- viewDidloadとかviewDidAppearは書けば自動的に呼んでくれるが、呼ばれる順番は決まっているので、詳しくはUIViewControllerのライフサイクルを参照
- reloadData()はUITableViewの関数
- セルの内容を更新し、表示する内容を変更したいときはこの関数を呼ぶとUITableViewをリロードして、値を更新してくれる
改めて完成図
- 投稿日:2020-11-20T15:11:23+09:00
[iOS・Swift] iPhoneからjsonデータを取得する方法
はじめに
Swiftでjsonファイルを取り出す過程で詰まるポイントがありましたので、共有したいと思います。
①jsonファイルを作成するまで
Export Json Fileというボタンを押して、jsonファイルを吐き出すようにしました。
※Simulatorではなく、実機で動かしています②jsonファイルをXcodeからダウンロードする
Devices and Simulatorsから作成したアプリケーションを選択します。
選択後、以下のような歯車ボタンからDownload Containerを開きます。
ダウンロード後、Finderよりダウンロードファイル(ex. com.kamimura.HealthKitDataCollection 2020-11-20 14/46.13.735.xcappdata)からパッケージの内容を表示で開きます。
その後、AppData -> Documents -> output.jsonで作成したjsonファイルが存在しております。
※ファイルの存在場所は、この限りではありませんのでご注意ください!
本アプリのGithub (https://github.com/Ryosukekamimura/HealthKit_Data_Collection)
最後まで読んでいただき、ありがとうございます。
誰かのためになれば、幸いです!
- 投稿日:2020-11-20T12:50:34+09:00
swift 名前がわかりづらい機能 2選
- 投稿日:2020-11-20T12:50:34+09:00
swift6 名前がわかりづらい機能まとめてみた。
- 投稿日:2020-11-20T12:50:34+09:00
swift 名前がわかりづらい機能まとめてみた。
- 投稿日:2020-11-20T10:38:00+09:00
[Swift5]storyboardとコードでNavigationBarをカスタムする方法
なぜstoryboardだけでやらない?
Swiftで開発を進める際に、storyboardでUIを構築するか、コードのみでUIを構築するか初学者の方は悩まれるのでは?と私は思います。
storyboardのみで開発しても良いのですが、コードでカスタムした方が作業工数を減らせることや、デザインの変更などが必要な場合に、コードの方が編集しやすい点などからコードでカスタムを行います。しかし、コードのみだと画面遷移などが直感的に理解しずらいので、今回は最低限をstoryboardで構築し、カスタム内容はコードで記述します。
その他にも、storyboardのみで構築するとコンフリクトが発生しやすい問題や、コードのみで構築するとコードの記述量が多くなるなど双方にメリット,デメリットが存在します。
storyboardでNavigartionControllerの実装
まずstoryboardでNavigationBarを用意します。
①storyboardのiPhoneを選択(下記画像中央)
②Xcodeのメニューバー(Mac液晶最上部)から
/Editor/Embed In/NavigationController/
を選択③すると下記画像のように
NavigationControllerを継承したViewController
が作成される。
これでstoryboardによるNavigationBarの準備が整いました。コードのよるNavigationBarのカスタム
NavigationBarのカスタムをコードでおこないます。今回カスタムするのは以下の通り。
① NavigationBarの色 ② NavigationBarのtitle ③ NavigationBarのtitleの文字色 ④ NavigationBarのtitleのフォントとサイズ ⑤ すりガラスのような状態をfalseに ⑥ NavigationBarの下線を消すそれではコードを記述します。
ViewController.swiftclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //NavigationBarのtitleとその色とフォント navigationItem.title = "サンプル文字列" self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20.0)] //NavigationBarの色 self.navigationController?.navigationBar.barTintColor = UIColor.red //一部NavigationBarがすりガラス?のような感じになるのでfalseを指定 self.navigationController?.navigationBar.isTranslucent = false //NavigationBarの下線を消す navigationController?.navigationBar.setValue(true, forKey: "hidesShadow") } }ビルドすると下記画像の通りNavigationBarのデザインが変更されたのが確認できます!
//一部NavigationBarがすりガラス?のような感じになるのでfalseを指定 self.navigationController?.navigationBar.isTranslucent = false
//一部NavigationBarがすりガラス?のような感じになるのでfalseを指定
に関しては、
false
を指定しない場合、想定外のカラーになるので記述。実際に自身で色やフォントサイズをアレンジしてみると学びが深まると思いますのでぜひ!
最後に
冒頭でも述べましたが、storyboardでのUI構築とコードのみでのUI構築の双方にメリット&デメリットが存在するので、互いの特徴を理解して扱っていく必要がありますね!
最後までご覧いただきありがとうございます!
ぜひ参考にしてください。
- 投稿日:2020-11-20T06:23:06+09:00
【Swift】UITextFieldのplaceholderの色を変更する
textfield.placeholderColor
みたいな感じで簡単に変更できるかなと思っていたのですが、そういう訳には行かなかったです。
開発環境 バージョン Xcode 12.1 iOS 14.1 Swift 5 textFieldのattributedPladeholderに値を代入してスタイルを変更する
textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])foegroundColorで色を変更する
attributes: [NSAttributedString.Key.foregroundColor: UIColor.red]
今回は例で赤色にしている箇所をお好みの色に変更すればplaceholderの色が変更出来ます。
おまけ
・
attributed
って何だと思い意味を調べたら、〜に帰属する
という意味でした。
・
attributedPladeholder
の説明には、このように記載があります。The styled string that is displayed when there is no other text in the text field.
テキストフィールドにテキストが無い時に表示されるスタイルされたStringです
とのことです。
そのスタイルに
NSAttributedString
を代入して決めてあげる感じみたいです。参考