大きなプロジェクトで作業している間にこの問題が発生しましたが、問題を示すために簡略化しました。比例制約を使用すると、異なる画面サイズでグリッチが発生する
私は広場と中央にある私のビューコントローラでのUIViewを持っています。今
高さや幅がある場合に問題が発生しないので、「プロポーショナルの高さ」は、ここで重要な定数に設定します。
私はこのビューが携帯電話上での素敵な円として表示させたいので、私はアウトを追加それからViewController.swiftにしましょう、ビューのlayer
にcornerRadius
を提供:
class ViewController: UIViewController {
@IBOutlet weak var centerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
centerView.layer.cornerRadius = centerView.frame.width/2
}
}
私のストーリーボードに私はiPhone SEへ「などの表示」を設定して、iPhone SEシミュレータでアプリを起動すると、私は期待される結果を得ます
しかし、私はストーリーボード内「として表示」を変更し、iPhone 6 Plusのシミュレーター上で起動しない場合は、これは私が得るものです:
私は期待していたそれだけでシミュレータのバグだが、物理的なデバイス上で起動するときに同じ問題が発生します。
私は画面に対応するストーリーボードを変更する、それが正常に戻ってい。アプリが展開されると、開発中のストーリーボードでどの画面を選択したのかによって、ユーザーはUIが乱れることがありますか?
更新。
override func viewDidLoad() {
super.viewDidLoad()
view.layoutIfNeeded()
centerView.layer.cornerRadius = centerView.frame.width/2
}
しかし、レイアウトはアプリがどの画面サイズに関係なく起動したときに強制することなく起こるべきではありません:私はViewControllerをファイルにlayoutIfNeeded()
を追加しても問題が解決されることに注意する必要がありますか?
'centerView.layer.cornerRadius = centerView.frame.width/2'を' viewDidLayoutSubviews'に移動します。 'viewDidLoad'では、ビューのサイズは、ストーリーボードまたはxibにあるものと同じになります。 'viewDidLayoutSubviews'は、ビューのフレームが更新された後に呼び出されます。 – beyowulf