2016-07-04 3 views
0

내 프로젝트에서 AutoLayOut을 사용하고 있습니다. 하나의 UIView가 subView 기본보기이고, 두 번째 (3 차원)의 너비와 그 높이가 해당 뷰와 동일한 너비 (제한을 사용하여)를 설정했습니다. 뷰를 원형으로 만들어야 cornerRadius를 heightOfView/2로 설정하고 있습니다. 보기의 높이와 너비는 1 : 1 비율로 지정됩니다. 내가NSLayoutConstraint에서 높이 값을 얻으십시오

@IBOutlet weak var circleHeight: NSLayoutConstraint 

지금은 그 높이 또는 폭을 액세서 싶어하지만 실제 값을 gwtting하고 있지 않다으로 그 구속의 출구를 만든

나는 스토리 보드에서 저장 한
circleHeight.firstItem.frame.width 

내가 값을 얻고, 내가 누락되었지만 알아낼 수없는 것이 있습니다

enter image description here 선택한보기는 원형이어야합니다. 하지만 constain의 값을 인쇄 할 때 높이와 너비가 214로만 제공됩니다.

+0

가 변경할 수있는 경우 파단/하위 레이어를 배치 할 때입니다 프레임 변경. – Wain

+0

프레임의 값이 변경되지 않습니다 –

+0

/프레임에 액세스하는 위치/시간은 언제입니까? Wain이 말했듯이 레이아웃 엔진이 트리거되면 변경 될 수 있습니다. 또한 이미지 하단에 제약 조건 위반이 표시되어 레이아웃이 올바르게 작동하지 않을 수 있습니다. –

답변

0
  1. 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() 메소드는 높이를 읽고 그것을 원 수 : 나는 당신이 viewWillAppear 또는 에서 값을 가져 오는 것 같아요

override func viewDidLayoutSubviews() { 
    let viewHeight = CGRectGetHeight(yourView.frame) 
    yourView.layer.cornerRadius = viewHeight/2 
    yourView.layer.masksToBounds = true 
}