14281


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

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

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

[code]

    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  
    
    }
    
[/code]

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

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


CC BY-SA 3.0
2015-08-10T21:18:03.677
14248
2015-08-12T09:11:38.617
2015-08-12T09:11:38.617
5519
10845
question
swift
Swift2で絵文字キーボードを作ろうと思っていますがエリアの高さの設定がわからない


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

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

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

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

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

[code]

    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)
        }
    }
    
[/code]


CC BY-SA 3.0
2015-08-11T11:20:21.757
14281
2015-08-11T11:20:21.757
5519
14248
answer