2013-03-20 1 views
1

주 UIViewConroller의 왼쪽에있는 컨테이너보기가 있습니다. 이 컨테이너 뷰는 맨 아래에 몇 개의 버튼, 중간에 사용자 데이터를 표시하는 UITableView, 상단에 다른 UITableView를 표시하여 을 선택하여 사용자 데이터를 표시합니다. 선택한 상위 데이터가 없으면 사라져서 최대 높이 200에 도달하도록이 Top UITableView의 동작을 원합니다. 선택한 각 데이터 항목은 표의 항목과 같습니다.UITableView 크기 및 NSLayoutConstraints와의 싸움

사진을 확인하십시오. 이 실행되는 그림에서 나는 하나 개의 선택된 데이터 항목이 "테스트"라는 제목로드 한 : 어쨌든

enter image description here enter image description here

, 내가 인터페이스 빌더에 의해 생성 된 레이아웃 제약 관련이 데 문제 . 다음은 데이터 테이블과 선택된 데이터 테이블을 동적으로 크기 조정하기 위해 취한 단계입니다.

-(void)setSelectedFacets:(NSArray *)selectedFacets{ 
    _selectedFacets = selectedFacets; 
    [self.selectedFacetsTableView reloadData]; 

    CGRect frame = self.selectedFacetsTableView.frame; 
    frame.size.height = 10 ;//36 * selectedFacets.count; 
    self.selectedFacetsTableView.frame = frame; 
    [self.selectedFacetsTableView setNeedsDisplay]; 
    [self.view setNeedsDisplay]; 
} 

냈다 위의 코드는 수행합니다

내가 = 200 < 될 상단 대부분의 TableView를 설정, 상위 테이블의 크기 조정을 할이 코드를 기본으로 가운데 하나를 왼쪽으로 한 다음 추가 (뷰 컨트롤러가 완전히로드 된 후) 실행하지만 실제 높이에는 영향을 미치지 않습니다.

누구에게도 경험이 있습니까?

NSLayoutConstraints에 IBOutlet을 추가하여 (참조를 얻은 다음) 런타임에 삭제할 수 있음을 알고 있습니다. 이것은해야 할 일보다 더 많은 일처럼 보입니다. 내가 놓친 게 있니?

답변

0

자동 레이아웃을 사용하는 경우 프레임을 설정하지 마십시오. 레이아웃 제약 조건을 추가/제거/수정하십시오.

"핀"및 "정렬"등의 버튼을 사용하여 IB에서 NSLayoutConstraints 만 사용하고 있는지 확인하십시오. 소스 코드에 액세스 할 수있는 tableView 높이에 대한 제약 조건을 확인하십시오

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *tableViewHeightConstraint;

실제로 높이가 setSelectedFacets:에서 updateViewContraints

- (void)updateViewConstraints { 
    CGFloat height = MAX(200.0f, 36.0f * selectedFacets.count); 
    [self.tableView removeConstraint:self.tableViewHeightConstraint]; 
    NSLayoutConstraint *lc = [NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:height]; 
    [self.tableView addConstraint:lc]; 
    self.tableViewHeightConstraint = lc; 
    [super updateViewConstraints]; 
} 

에 있어야 설정하는 코드 조각 그냥 전화 [self updateViewConstraints]