3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Swift】inputAccessoryViewがiPhoneXのホームボタンエリアに被る件を解決しようとする(XibでViewを作成した場合)

Last updated at Posted at 2018-02-08

コードでViewを作成した場合

チャットアプリなどでよく見かける
画面の下にずっと出ている入力欄を実装するとき
inputAccessaryViewを使うと楽に実装できますが、
iPhoneXだとこの入力欄がホームボタンのエリアにかぶります。

4.png

これを解決する方法を探していました。
コードでViewを作成した場合はうまくいったのですが、
XibでCustomViewを作成した場合に色々模索した結果、
1つ方法を見つけたので記録として残しておきます。

まず下記のサイトを参考にしました。
https://medium.com/code-with-rohit/inputaccessoryview-and-iphonex-7b5547fe98da

1. UseSafeAreaにチェックを付ける

1.png

2. ViewのSafeAreaLayoutGuideのチェックを外す

2.png

3. ContainerViewのSafeAreaLayoutGuideにチェックを付ける

5.png

4. TextViewのbottom制約をSafeLayoutに変更する

4.png

結果がこうなりました。
1.1.png

色々試行錯誤してみましたがうまく行っていません。

最終的にCustomViewのコードを以下のようにすると、

InputAccessaryView.swift

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)
    }
}

結果こうなりました。

1.3.png

参考サイト
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の背景色を変えることで変更は可能)

という問題がまだ残っています。

何か解決方法をご存知の方いらっしゃいましたら
教えていただけましたらうれしいです:bow_tone1:

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?