Swift2で絵文字キーボードを作ろうと思っていますがエリアの高さの設定がわからない

投稿者: Anonymous

キーボードを作ってみたいと思っています。
そこで、キーボードのエリアの高さを調整したいと思っています。

具体的には候補表示用に、1行分、広げたいのです。

どのようにしたら、高さを調整できますか?

let portraitHeight:CGFloat = 256.0
let landscapeHeight:CGFloat = 203.0
var heightConstraint: NSLayoutConstraint?

override func updateViewConstraints() {
    super.updateViewConstraints()
    // Add custom view sizing constraints here
    if (self.view.frame.size.width == 0 || self.view.frame.size.height == 0) {
        return
    }
    inputView!.removeConstraint(heightConstraint!)
    let screenSize = UIScreen.mainScreen().bounds.size
    let screenH = screenSize.height;
    let screenW = screenSize.width;
    let isLandscape =  !(self.view.frame.size.width == screenW * ((screenW < screenH) ? 1 : 0) + screenH * ((screenW > screenH) ? 1 : 0))
    NSLog(isLandscape ? "Screen: Landscape" : "Screen: Potriaint");
    if (isLandscape) {
        heightConstraint!.constant = landscapeHeight;
        inputView!.addConstraint(heightConstraint!)
    } else {
        heightConstraint!.constant = self.portraitHeight;
        inputView!.addConstraint(heightConstraint!)
    }
    // Add custom view sizing constraints here
}


override func viewDidLoad() {  
    super.viewDidLoad()  

    let flowLayout = UICollectionViewFlowLayout()  

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DismissKeyboard")  
    view.addGestureRecognizer(tap)  


    bunPrint()  
    btnTitle1()  
    fFastBoot = false  

}

上記ソースはNSLogで落ちます。

よろしくお願いいたします。

解決

カスタムキーボードの高さを変えるのはAutoLayoutでやる必要があります。
(他の一般のビューと違って、AutoLayout以外の方法では、実際の高さが変化しません)

公式のドキュメントでは下記の中ほどに書いてあります。

https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html

いろいろ注意点がありまして、設定するのはviewDidAppear以降のタイミングでなければなりません。
(それ以前に同じコードで設定しても無視されます。viewDidAppear以降ならいつでも任意の高さに変更することが可能です。)

もっとも簡単な例でいうと、下記のように、初期のコードにviewDidAppearメソッドをオーバーライドして、高さを設定するAutoLayoutの制約を付けるコードを追加します。
下記の例だと、高さを500ポイント(通常の高さの約2倍)に設定しています。

class KeyboardViewController: UIInputViewController {
    ...

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        let heightConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 0, constant: 500)
        view.addConstraint(heightConstraint)
    }
}
回答者: Anonymous

Leave a Reply

Your email address will not be published.