2016-09-26 6 views
0

私はInterface Builderで編集した独自のビューを持つカスタムキーボードを使っています。親ビューにプログラムで追加されたビューサイズを作成する方法

ビューは、読み込み時にキーボードのルートビューにプログラムによって追加されます。それはスタックビューを含み、ビュー全体を満たし、自動的にサイジングします。

キーボードビューは、開いているアプリの表示に合わせてサイズが変わっていません。シミュレータを水平に回転させると幅が大きくなり、垂直方向が小さくなります。

サイズは、配置するルートビューの幅にするにはどうすればよいですか?ここで

はキーボードがInterface BuilderでやiPhone 5Sを実行するシミュレータでどのように見えるかです:

sizes

+1

今見ているスクリーンショットをいくつか追加してください。 –

答えて

-2

あなたはこれらの通知を実装してみましたか?これらの通知が呼び出されたとき

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardFrameWillChange:) 
              name:UIKeyboardWillShowNotification 
             object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardFrameWillChange:) 
              name:UIKeyboardWillChangeFrameNotification 
             object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification 
             object:nil]; 

次に、キーボードのフレームに、あなたのビューのサイズを変更

CGRect keyboardFrame; 
[[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame]; 

CGRect viewFrame = keyboardFrame; 
+0

この質問はObjective-CではなくSwiftのタグが付けられています。 – Moritz

0

まず我々はそうのようにこれを行うことができ、レイアウトの変更からサイズの変更にフックを取得する必要があります:

override var bounds: CGRect { 
    didSet { 
     print("Bounds have changed: \(bounds)") 
    } 
} 

これは、カスタムキーボードビューで使用する必要があります。次に、カスタムキーボードレイアウトを更新します。あなたのスクリーンショットを見ると、キーの高さと幅を調整するだけで済み、後でサイズクラスの変更によって調整が追加され、レイアウトをより詳細に制御できることが示唆されています。 @IBOutletsを使用して高さと幅の制​​約を参照したり、サブビューを繰り返したり、手動で幅と高さの制約を見つけたり変更したりする必要があります。どちらも面倒ですが、@IBOutletsを使用する方が簡単です。

func updateKeys() { 
    DispatchQueue.main.async { 
     // Create array of width constraints 
     let widthConstraints: [NSLayoutConstraint] = widthArray() 
     widthConstraints.forEach { _ in /* change width constant for current layout */ } 

     // Create array of height constraints 
     let heightConstraints: [NSLayoutConstraint] = heightArray() 
     heightConstraints.forEach { _ in /* change height constant for current layout */ } 

    } 
} 

これはやってのただ一つの方法ですが、私はオートレイアウトとそこに複雑なレイアウトでそれをやっての1つの方法は、常にだが、それはあなたが使用できるパターンを示すべきであることがわかります。

関連する問題