2014-09-16 3 views
1

내가보기를 렌더링하는 순서로 다음과 같은 3 단계가 알고 : 레이아웃 하위 뷰 이후에 제약 조건을 업데이트하는 방법은 무엇입니까?

  • 디스플레이 (우리가 프레임의 계산 어디서 여기)

    1. 업데이트 제약
    2. 레이아웃보기를

    내 사용자 정의 단추의 높이를 수정하면 해당 단추가 주변보기에 제약이 있습니다. 어떻게 해당 제약 조건을 업데이트하고 뷰와 겹치지 않게 할 수 있습니까? 주석 처리 된 선을 볼 수 있으며 그 중 일부는 작동하지 않습니다.

    class DynamicHeightButton: UIButton { 
    
        override func layoutSubviews() { 
         super.layoutSubviews() 
    
         let size = (self.titleForState(UIControlState.Normal)! as NSString).boundingRectWithSize(CGSizeMake(self.bounds.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil) 
         self.bounds.size.height = size.height + 8 
    
         //viewController!.view.setNeedsUpdateConstraints() 
         //self.setNeedsUpdateConstraints() 
         //self.setNeedsLayout() 
        } 
    } 
    
  • 답변

    1

    자동 레이아웃보기의 프레임을 사용하는 경우 설정하지 않아야합니다. 대신 그것의 제약 조건, 일반적으로 '상수'속성을 조정해야합니다.

    필자의 경우보기의 높이를 변경하고 제한 조건을 위반하는 프로세스에서 변경했습니다.

    내 사용자 정의 클래스 3 개 라인을 추가 한

    :

    @IBOutlet weak var height: NSLayoutConstraint 
    
    self.bounds.size.height = size.height + 8 
    height.constant = size.height + 8