7

ドキュメントによると、カスタム キーボードの高さを変更するのは簡単です。これは、Appleのドキュメントに示されているコードのswiftと同等のバージョンです

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

    let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0)
    self.view.addConstraint(constraint)
}

これは機能しますが、高さを一定の値に変更します。これは、デバイスの向きを変更した場合に望ましくありません。キーボードの高さを 400.0 に設定すると、ポートレート モードでは問題ないかもしれませんが、ランドスケープ モードでは適切ではない可能性があります。例: iPhone 5 の標準キーボード ビュー サイズは、縦向きで 320,216、横向きで 568,162 です。一定の高さを設定すると、キーボード ビューのサイズが縦向きで 320,400、横向きで 568,400 (実質的に画面全体) に変更されます。

私の唯一の考えは、すべてのデバイス タイプと各方向のキーボード ビュー サイズを含むディクショナリを作成し、デバイスの方向が変わるたびに一定の高さの制約を更新することです。よりエレガントなソリューションを見つけた人はいますか?

4

1 に答える 1

2

willAnimateRotationToInterfaceOrientation:私はキーボードのView Controllerに実装することでこれを行いました。理論的には、 new willTransitionToTraitCollection:withTransitionCoordinator:または理想的には Maybe を使用する必要がありますviewWillTransitionToSize:withTransitionCoordinator:が、少なくとも 8.0.2 の時点では、これらは UIInputViewControllers で呼び出されないようです。したがって、現在のところ、heightConstraint への参照を保持し、実装の定数を変更するのが最善の選択肢のようです willAnimateRotation

また、新しいオリエンテーションを実際に把握するのに少し問題があったことも覚えています。私は最終的に次のようなことをしました:

let isLandscape: Bool = UIInterfaceOrientationIsLandscape(toInterfaceOrientation)そしてそれを使用します。

于 2014-10-19T18:01:50.607 に答える