チャットアプリなどでよく見かける
画面の下にずっと出ている入力欄を実装するとき
inputAccessaryView
を使うと楽に実装できますが、
iPhoneXだとこの入力欄がホームボタンのエリアにかぶります。
これを解決する方法を探していました。
コードでViewを作成した場合はうまくいったのですが、
XibでCustomViewを作成した場合に色々模索した結果、
1つ方法を見つけたので記録として残しておきます。
まず下記のサイトを参考にしました。
https://medium.com/code-with-rohit/inputaccessoryview-and-iphonex-7b5547fe98da
1. UseSafeAreaにチェックを付ける
2. ViewのSafeAreaLayoutGuideのチェックを外す
3. ContainerViewのSafeAreaLayoutGuideにチェックを付ける
4. TextViewのbottom制約をSafeLayoutに変更する
色々試行錯誤してみましたがうまく行っていません。
最終的にCustomViewのコードを以下のようにすると、
import UIKit
class InputAccessaryView: UIView {
@IBOutlet weak var textView: UITextView!
//!!!!!!!!!!BottomAnchorを調整!!!!!!!!!!!!!
override func didMoveToWindow() {
super.didMoveToWindow()
if #available(iOS 11.0, *) {
if let window = self.window {
self.bottomAnchor.constraintLessThanOrEqualToSystemSpacingBelow(
window.safeAreaLayoutGuide.bottomAnchor, multiplier: 1.0).isActive = true
self.backgroundColor = .lightGray
}
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
let view = Bundle.main.loadNibNamed("InputAccessaryView", owner: self, options: nil)?.first as! UIView
view.frame = self.bounds
self.addSubview(view)
}
}
結果こうなりました。
参考サイト
https://stackoverflow.com/questions/46282987/iphone-x-how-to-handle-view-controller-inputaccessoryview
http://ahbou.org/post/165762292157/iphone-x-inputaccessoryview-fix
かぶる現象は解決しましたが、
・[LayoutConstraints] Unable to simultaneously satisfy constraints.がコンソールに出力される
・ホームボタンエリアの背景色が変わらない。(ViewControllerの背景色を変えることで変更は可能)
という問題がまだ残っています。
何か解決方法をご存知の方いらっしゃいましたら
教えていただけましたらうれしいです