2017-11-10 6 views
0

大きなプロジェクトで作業している間にこの問題が発生しましたが、問題を示すために簡略化しました。比例制約を使用すると、異なる画面サイズでグリッチが発生する

私は広場と中央にある私のビューコントローラでのUIViewを持っています。今

enter image description here enter image description here

高さや幅がある場合に問題が発生しないので、「プロポーショナルの高さ」は、ここで重要な定数に設定します。

enter image description here

私はこのビューが携帯電話上での素敵な円として表示させたいので、私はアウトを追加それからViewController.swiftにしましょう、ビューのlayercornerRadiusを提供:

class ViewController: UIViewController { 

    @IBOutlet weak var centerView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     centerView.layer.cornerRadius = centerView.frame.width/2 
    } 

} 

私のストーリーボードに私はiPhone SEへ「などの表示」を設定して、iPhone SEシミュレータでアプリを起動すると、私は期待される結果を得ます

enter image description here enter image description here

しかし、私はストーリーボード内「として表示」を変更し、iPhone 6 Plusのシミュレーター上で起動しない場合は、これは私が得るものです:

enter image description here enter image description here

私は期待していたそれだけでシミュレータのバグだが、物理的なデバイス上で起動するときに同じ問題が発生します。enter image description here enter image description here

私は画面に対応するストーリーボードを変更する、それが正常に戻ってい。アプリが展開されると、開発中のストーリーボードでどの画面を選択したのかによって、ユーザーはUIが乱れることがありますか?

更新

override func viewDidLoad() { 
    super.viewDidLoad() 
    view.layoutIfNeeded() 
    centerView.layer.cornerRadius = centerView.frame.width/2 
} 

しかし、レイアウトはアプリがどの画面サイズに関係なく起動したときに強制することなく起こるべきではありません:私はViewControllerをファイルにlayoutIfNeeded()を追加しても問題が解決されることに注意する必要がありますか?

+0

'centerView.layer.cornerRadius = centerView.frame.width/2'を' viewDidLayoutSubviews'に移動します。 'viewDidLoad'では、ビューのサイズは、ストーリーボードまたはxibにあるものと同じになります。 'viewDidLayoutSubviews'は、ビューのフレームが更新された後に呼び出されます。 – beyowulf

答えて

1

ビューはサイズを頻繁に変更する可能性があります。 viewDidLoad().cornerRadiusを設定すると、ビューが変更されても反映されません。

あなたのUIViewをサブクラスオフはるかに良いようになります。

class RoundedView: UIView { 
    override func layoutSubviews() { 
     self.layer.cornerRadius = self.bounds.size.height/2.0 
    } 
} 

と、ストーリーボードでそれをレイアウトするときは、「ラウンドビュー」を参照してくださいので、あなたは簡単にそれが「設計可能」にすることができます。

@IBDesignable 
class RoundedView: UIView { 
    override func layoutSubviews() { 
     self.layer.cornerRadius = self.bounds.size.height/2.0 
    } 
} 
関連する問題