2013-03-08 4 views
0

UILabel의 숨겨진위한 자동 레이아웃 무시 : 나는 나는 다음과 같은 상황을 가지고

  • 을 자동 레이아웃 사용하고

    1. 내가 정보 텍스트의 UILabel를 포함하는 UITableViewCell을했습니다. 이 부분 UILabeluilabel과 같은 다른 UI 요소입니다 (두 번째 그림 참조). 버튼과 같은 다른 요소 (그림에 표시되지 않음)
    2. 정보 텍스트 uilabel은 동적으로 높이가 낮기 때문에 아래 요소는 정보 텍스트 레이블의 높이에 따라 수직으로 내려갔습니다.
    3. 첫 번째 그림에서 수평선을 볼 수 있습니다. 이 수평선은 정보 레이블의 높이가 커지면 수직으로 내려갑니다. '가격 변경'레이블은이 수평선의 위치에 따라 세로로 정렬됩니다.

    잘 작동합니다. 정보 텍스트가 커지면 다른 요소는 원하는대로 내려갑니다.

    enter image description here

    지금 내 문제는 : 때때로 정보의 라벨과 수평 구분자는 어떤 정보 텍스트가 없기 때문에 숨길 필요가있다. 유감스럽게도 uilabel 아래의 요소는 숨겨져 있지만 레이블 높이만큼 아래로 이동합니다. 내 그림의 오른쪽을보십시오. 요소는 빨간색 세로 막대로 표시된 양만큼 위로 이동해야합니다.

    정보 가격 및 "수요액"레이블이 숨겨져 있으면 위로 이동해야한다는 "가격 변동"요소를 어떻게 알 수 있습니까?

    enter image description here

    업데이트 : 지금 (세 번째 사진에서 보라)

    enter image description here

    내 코드에 두 NSLayoutContstraints을 추가하고 스토리 보드에서 생성 된 제약에 연결

    여기에 설명이 있습니다. 두 개의 NSLayoutConstraints가 있습니다. 첫 번째 : horizontalSeparatorContstraint가 첫 번째 가로 구분 기호 인 UIImage의 "Price Changes in"레이블을 연결합니다. 전망. "Demands"와 "Special Requests Label"이 숨겨져 있으면이 제약 조건이 적용되고 "Price changes in"레이블이 위쪽으로 이동하도록 값을 4 단위로 설정합니다. 두 번째 제약 : requiresLabelContstraint - 두 번째 가로 UIImageView와 "가격 변경"레이블 사이의 폐기 된 공간을 설명합니다. 간격은 4 단위 여야합니다. 그리고 특수한 요청 텍스트가 사용 가능한 경우이 제약 조건은 "acitve"여야합니다.

    if(tour.specialRequests.length > 0) { 
        [demandsLabelContstraint setPriority:UILayoutPriorityDefaultHigh]; 
        [horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultLow]; 
    
        self.demandsLeftLabel.text = NSLocalizedString(@"GenericTour_Demands", @""); 
        self.demandsRightLabel.text = tour.specialRequests; 
    
        demandsLeftLabel.hidden = NO; 
        demandsRightLabel.hidden = NO; 
        horizontalSeparator.hidden = NO; 
    } else { 
        [demandsLabelContstraint setPriority:UILayoutPriorityDefaultLow]; 
        [horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultHigh]; 
    
        horizontalSeparator.hidden = YES; 
        demandsRightLabel.hidden = YES; 
        demandsLeftLabel.hidden = YES; 
    } 
    

    당신이 볼 수있는 코드에서 : : 여기

    몇 가지 새로운 코드 내 생각은 각 상황에 대한 우선 순위를 전환하는 것입니다. 특수 요청 텍스트가 사용 가능하면 우선 순위를 설정하여 해당 NSLayoutContraints가 트리거됩니다.

    Autolayout에 대한 나의 의도 또는 의도는 우선 순위를 변경함으로써 그 사이를 전환 할 수 있다는 것입니다. 그러나 이것은 사실이 아닌 것처럼 보입니다.

    그래서 문제를 어떻게 해결해야합니까?

  • 답변

    0

    IBOutlet을 추가하면 인터페이스 작성기에서 만든 제약 조건을 프로그래밍 방식으로 추가하고 제거 할 수 있습니다.

    정보 레이블 및 가로 구분 기호와 관련된 제약 조건에 IBOutlet을 추가하면 숨겨진 경우 해당 제약 조건을 제거하고 레이블을 다시 표시 할 때 다시 넣을 수 있습니다.

    당신은 또한 가격 변경 라벨이 비디오에 있었다

    제대로 연결되도록 정보 레이블이 숨겨져 때마다 상단에 수평 분리에 가격 변경 레이블을 연결하는 새로운 제약 조건을 추가 할 수 WWDC 2012에서 이와 같은 작업을 수행하는 방법을 설명 했으므로 자동 레이아웃 마스터 링을위한 모범 사례라고 생각합니다.

    +0

    답변 해 주셔서 감사합니다. 내 질문을 업데이트했습니다. – toom

    관련 문제