2014-07-09 2 views
2

UITableViewCell 내부의 텍스트 크기를 기반으로 동적으로 크기를 조정해야하는 두 개의 UILabel을 만들어야합니다. 첫 번째 UILabel이 (텍스트 기준으로)이되어야하며 항상 오른쪽 테두리에 15 포인트를 정렬해야합니다. 두 번째 UILabel은 (또한 왼쪽으로 동적으로 커야 함) 첫 번째 UILabel 오른쪽에 7 포인트 정렬되어야합니다.autoLayout을 사용한 동적 뷰 변경 (즉, UILabel)

... [label 2]<--7p-->[label 1]<--15p-->|right cell border

  1. 이가 (코드 제외) 스토리 보드에서만 수행 할 수 있습니까?
  2. 스토리 보드 레이아웃에서 수평 제약 조건을 정의하고 코드에서 sizeToFit:을 정의했습니다. 및 가로 제약 조건이 재정의 된 것을 알게되었습니다. 가 viewDidLoad:의 프레임을 변경하는 시도하지만 모두가 업데이트 된 (0 지연 선택을 수행 -. 한 초 지연을 모든 셀에 갱신 모든 레이블을하지만 생성)

은 알려 주시기 바랍니다, 감사 Asaf

답변

1

질문 1)

실제로 코드에서이를 수행 할 수 있습니다. 하지만 저는 Interface Builder를 귀하의 경우에 더 잘 생각합니다.

코드에서 [sizeToFit :]을 할 필요가 없다고 생각합니다.

라벨에 너비 제한을 설정하지 않으면 스토리 보드에 경고가있는 것 같습니다.

UIControls는 UILabel과 유사하지만 UICutton은 텍스트 콘텐츠가 있기 때문에 고유 한 크기를 가지고 있습니다. 따라서 너비 제약 조건을 설정할 필요가 없습니다.

하지만 레이블이 두 개인 경우 레이블간에 충돌이있을 때 autolayout이 어떤 레이블이 더 중요한지 알게해야합니다. - 예. 레이블에 긴 텍스트가있는 경우 레이블의 텍스트가 줄이지 않고 표시됩니다 (...).

이렇게하려면 인터페이스 작성기에서 포옹 (또는 압축) 우선 순위를 설정하십시오.

질문 2)

[있는 viewDidLoad는 :] 형상 일 변화에 적합하지 않다. [viewWillAppear :]

자세한 정보가 필요하면 UIViewController보기가 뷰 계층 구조에 추가됩니다. 알려 주시기 바랍니다.

1

코드 또는 StoryBoard 자동 레이아웃으로 결과를 얻을 수 있습니다. 여기에 스토리 보드 자동 레이아웃을위한 단계는 다음과 같습니다

1. 당신이 두 개의 레이블없이 자동 레이아웃 제약 세포가 있는지 확인

2Label 1에 제약 조건을 추가 (그들있는 경우 취소) :

TwoLabelsCell_Label1_Constraints

3.Label 2에 제약 조건을 추가 :

TwoLabelsCell_Label2_Constraints

결과 :

TwoLabelsCell_Result

비고 :

  • 노는와 레이아웃은보기 컨트롤러에서 updateViewConstraints을 재정 의하여 수행해야합니다. [super updateViewConstraints]에 전화하는 것을 잊지 마세요.

  • 귀하의 경우에는 sizeToFit: 방법을 처리 할 필요가 없습니다.

+0

@Asaf 솔루션을 확인 했습니까? 그것은 당신의 문제를 해결합니까? – Keenle