2016-07-04 14 views
0

私のプロジェクトでは、AutoLayOutを使用しています。サブビューのメインビューであるUIViewが1つあり、2:3のスーパービューの幅とその高さをViewに等しい幅に設定しました。ビューを円形にする必要があるので、cornerRadiusをheightOfView/2に設定しています。ビューの高さと幅の1:1アスペクト比があります。今、私はその高さまたは幅をアクセスもしたいが、私は、私はストーリーボードから保存されている値を取得しています、NSLayoutConstraintから高さの値を取得

circleHeight.firstItem.frame.width 

を実際の値をgwttingないメートル

@IBOutlet weak var circleHeight: NSLayoutConstraint 

ように私はそれのアウトレット制約を作成しました私は見つからないものがありますが、それを理解できませんでした。

enter image description here 選択したビューは円形でなければなりません。しかしconstainの値を出力すると、高さと幅が214にしかなりません

+0

あるので、あなたはときサブビュー/サブレイヤがレイアウトされているときであるフレームの変更、半径を更新する必要があります。 – Wain

+0

フレームの値は変更されていません –

+0

/いつフレームにアクセスしていますか?ワインは言うように、レイアウトエンジンが起動されると変更されることがあります。また、画像の下部に制約違反が表示されます。これにより、レイアウトが正しく機能しない可能性があります –

答えて

0
  1. 私はあなたがviewWillAppearまたは ViewDidLoadに値をフェッチするかもしれないと思うが、これらの方法は、取得するときにビューフレームが更新されません。
  2. したがって、ViewDidAppearメソッドで幅または高さを取得する必要があります。
  3. ViewDidLayoutSubViewsの高さまたは幅を取得した場合、パフォーマンス は何度も呼び出されると性能が低下します。ここで

は、それが変更できるコード

override func viewDidAppear(animated: Bool){ 
     super.viewDidAppear(animated) 
     let viewHeight = CGRectGetHeight(yourView.frame) 
     yourView.layer.cornerRadius = viewHeight/2 
     yourView.layer.masksToBounds = true 
    } 
0

制約には高さや幅はなく、関係自体、優先順位、定数値はありません。

はあなたが興味のあるサブビューの高さにアクセスするには、いつものようにアクセスする必要があります。
<uiview_outlet>.frame.size.height 

はそれがお役に立てば幸いです。

1

このUIViewのIBOutletを作成するには、円の形にする必要があります。 はその後、あなたはその高さを読んで、それを円にすることができviewDidLayoutSubviews()メソッドで:

override func viewDidLayoutSubviews() { 
    let viewHeight = CGRectGetHeight(yourView.frame) 
    yourView.layer.cornerRadius = viewHeight/2 
    yourView.layer.masksToBounds = true 
} 
関連する問題