Open8
iOS 15 に対応する (Xcode 13.0)
ビルドが通らない
Xcode 12 でも時々起こる。必要なインポート文を追加する。
navigationBar.barTintColor が効かない (ナビゲーションバーが黒っぽくなる)
iOS 15 でUIKit がscrollEdgeAppearance の利用を拡張するようになったとのこと。
standardAppearance
とscrollEdgeAppearance
を与えるようにする。
- navigationController?.navigationBar.barTintColor = .white
if #available(iOS 15.0, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = .white
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
} else {
navigationController?.navigationBar.barTintColor = .white
}
参考
image didFinishSavingWithError のimage がnil になる
挙動が変わったのか、バグなのか不明。
@objc func image(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) {
print(image == nil) // => true when iOS 15
yourFunc(image: image, error: error)
}
image
を自分で事前に保持することで対処する。
if #available(iOS 15.0, *) {
self.image = image
}
//
}
@objc func image(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) {
// 暫定対処
if #available(iOS 15.0, *) {
yourFunc(image: nil, error: error) // should handle self.image
} else {
yourFunc(image: image, error: error)
}
}
参考
Menu のlabel に設定したアイコンの表示が崩れる
iOS 15 だとUI の表示が崩れてしまった。
Menu {
Button("Cancel", action: didTapGoBackCancelButton)
} label: {
Image(systemName: "chevron.left")
.resizable()
.scaledToFit()
.imageScale(.large)
.padding()
}
ZStack
に入れてレイアウトを調整することで意図通りの表示になった。
Menu {
Button("Cancel", action: didTapGoBackCancelButton)
} label: {
ZStack {
Image(systemName: "chevron.left")
.resizable()
.scaledToFit()
.imageScale(.large)
}
.padding(.leading, 16)
}
タブバーの外観がおかしい
ナビゲーションバーと同様の対応をする。
if #available(iOS 15.0, *) {
guard let tabBarController = tabBarController else { return }
let appearance = UITabBarAppearance()
appearance.backgroundColor = UIColor.white
tabBarController.tabBar.standardAppearance = appearance
tabBarController.tabBar.scrollEdgeAppearance = appearance
}
Text 要素でlocalizable string のキー名が表示されてしまう
"yourKey" = "";
このように翻訳のキーを指定すると、UI にyourKey
という文字列が表示されてしまう。
空文字でないスペース文字を値に与えることで、文字列が描画されないようにできた。
"yourKey" = " ";
アニメーションが崩れる
opacity のみのアニメーションを実装したが、iOS 15 だと謎のレイアウトアニメーションが加わってしまう。(iOS 15 以外でも再現するかも)
DispatchQueue.main.async
を記述したところ、意図通りにopacity のみのアニメーションが描画されるようになった。
@State private var yourOpacity = Double(1)
.onAppear() {
+ DispatchQueue.main.async {
withAnimation(.easeInOut(duration: 1.0).delay(1.5)) {
yourOpacity = 0
}
+ }
アプリアイコンが反映されない (暫定対応)
アプリをXcode でビルドしてインストールしてもアプリアイコンが反映されない。
アプリインストール後に端末を再起動すると、アプリアイコンが反映された。
Blank App Icon (physical device) -… | Apple Developer Forums