投稿

2月, 2022の投稿を表示しています

【SwiftUI】(その3) ZStack構成のViewの配置で、ignoreSafeAreaとキーボード回避についてキーボード回避で避けた方が良いと思うUI

・問題のUI構成 UI構成として、TextFildが数多く並んだリストが上部で、 最下部に、固定入力フィールドがある構成のUIは キーボード回避をした時に、おかしな挙動になるので、 UIデザインを検討する際に避けた方が良いです。 例えば以下のようなコードの構成で、 ScrollViewの画面下の方にあるTextFieldをタップすると、 画面下部の固定のTextFieldも一緒にリストアップする。 タップしたのが、 ScrollView中のTextFieldであるにも関わらず、 他のTextFieldも、キーボードと一緒にリフトアップされる。 この動作が人により違和感を感じることだろうと思います。 これは、キーボードによりViewの下部が迫り上げられるため、 本現象は発生します。 VStack {  // 表示量が画面の高さをこめる量とする ScrollView ForEach { TextField } } TextField } ・代替案 固定のTextFieldを上部に配置して、その下部に、 TextFieldを並べたScrollViewを配置した場合は、 キーボード回避に違和感はなくなリます。 →そもそも、ScrollView内に、すべてTextFieldを 配置してしまう場合もありでしょう。 ・検討案 もし、どうしても上部に TextFieldを並べた ScrollViewで、 下部に固定のTextFieldに したい場合は、以下の方法を検討してみてはいかがでしょうか。 上部のScrollViewと下部の固定のTextFieldを キーボード回避を無効にして、 キーボード出現時に、 上部のScrollView内部のoffsetと下部の固定の TextFieldのOffsetをそれぞれタップされ、 Focusが あたったときに、 導き出す。 この動作が可能な場合、それぞれで キーボード回避の挙動が実現できるのではないでしょうか。

【SwiftUI】(その2) ZStack構成のViewの配置で、ignoreSafeAreaとキーボード回避について

前回の記事でGemetory Readerを利用したコードを記載しましたが、利用せずに、ZStackのViewでキーボード回避ができることがわかったので以下にコードを掲載します。 サンプルコード 上記の例で利用したコードです

【SwiftUI】(その1) ZStack構成のViewの配置で、ignoreSafeAreaとキーボード回避について

イメージ
 iOS14、edgesIgnoringSafeAreaがdeprecateに表示になり、safeAreaへの表示の拡張はignoreSafeAreaを利用します。 https://developer.apple.com/documentation/swiftui/view/edgesignoringsafearea(_:) また、 ignoreSafeAreaは、表示の拡張だけではなく、キーボードを表示した際に、キーボードの下とTextFieldと重ならないようにする設定も可能です。 設定については、先駆者の方のサイトとして 以下サイトがわかりやすかったです。 ・カピ通信さんのサイト https://capibara1969.com/3617/ ■ZStackの構成のサンプル ZStackで、一部のViewはキーボード回避を無効させ、一部のViewは、キーボード回避をさせたい場合は、ハマりました。 以下のようなコードで実施するとうまくいきました。 Gemetoryを一番外側にする構成です。 残念ながら理由については、定かではありません。 stackOverFlowで、ZStackを利用した場合にキーボード回避を無効にしたい場合は、Geometoryを利用している記事があり、その成功事例からのサンプルコードになります。 ・サンプル画面の構成について [画面] [画面構成について] ・Z座標で一番上にくるのが中央のリストです。textFieldを並べたリストです。placeHolderに、Item+アイテム要素番号が表示されています。 ・上記のリストの奥のViewでは、画面下に「入力してください」というplaceholderのあるTextViewを配置しております。中央のリストとの重なりで、「入力して」というplaceHolderのみ見えています。 ・一番後ろにある黄色の画面は、背景の想定でセーフエリア外に表示して、キーボードが出現した場合にリフトアップしない想定です。 [動作] ・リストの要素のitem+15のTextFieldをタップ キーボード出現に伴い、item+15が隠れないようにリフトアップします。 ・リストの後ろの「入力して」のTextField部分をタップ キーボード出現に伴い、「入力して」

【Swift】RealmファイルをiCloudにバックアップ・リストアする

イメージ
RealmファイルをiCloudにバックアップ・リストアする方法を挙げます。この辺りの環境設定とコードの記載がある記事は、あまりないため、まとめました。 [実行環境] Xcode13.1 Realm 10.19.0(SwiftPMから導入) [手順] 手順は以下となります。 1). 事前準備 Realmを導入した後、何かしらデータを登録してある状態とします。 2). iCloudの環境設定 2-1). apple developer program側の設定  apple developer programで「Certificates, Identifiers & Profiles」のサイドメニューで、以下の画面で、画面右側の虫眼鏡マークの右横を「iCloud Containers」変更をして 「identifiers」の右のプラスマークからiCloud Containerの登録をします。(ご注意:追加したiCloud Containerは消せないので、登録はタイプミスがないようにご注意ください。削除ができないことは以下の記事にもあります。 https://developer.apple.com/forums/thread/5547 ) iCloud Containerの登録で「identifire名」が重要です。登録作業を進めると以下の画面が表示されます。画面の「identifire名」欄には、「 We recommend using a reverse-domain name style string (i.e., com.domainname.appname).」とあります。仮に例のように指定するとiCloud.com.domain.appnameと頭に、「iCloud.」 が含まれて登録となります。 2-2). Xcode側の設定 2-2-1). signinig&Capabilityの設定 Xcodeの設定で、「signinig&Capability」の+選択から「iCloud」を選択してください。以下の画面のようにiCloudの設定をできる画面が表示されるます。Xcode側でApple Idと紐付け設定済みの場合(※)は、以下の画面の白色で塗りつぶされている箇所には、2-1)で登録してiCloud Contaier名が表示されま