[objective-c] iOS8-제약 조건이 모호하게 높이 0을 제안 함

누구든지 이것을 디버그하는 방법을 알고 있습니까?

한 번만 경고 : 제약 조건이 테이블 뷰 셀의 콘텐츠 뷰에 ​​대해 높이 0을 모호하게 제안하는 경우를 감지했습니다. 의도하지 않은 붕괴를 고려하고 대신 표준 높이를 사용합니다.

행의 높이는

- (CGFloat)tableView:(UITableView *)tableView
           heightForRowAtIndexPath:(NSIndexPath *)indexPath{
   return 34.0;
}

그리고 모두 constraints가 행복한 것 같습니다 …



답변

반환 높이와 예상 높이를 강요하면 경고가 사라졌습니다.

- (CGFloat)tableView:(UITableView *)tableView
           estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}

- (CGFloat)tableView:(UITableView *)tableView
           heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}

두 개의 재정의가 필요하지 않은 또 다른 솔루션은 단순히 또는 init 메서드 self.tableView.rowHeight = 44;에서 사용 하는 것 loadView입니다.


답변

또한 할 수있는 것은 콘텐츠보기의 상단과 하단에서 수직 제약 조건을 추가하는 것입니다. 이렇게하면 자동 레이아웃이 행복해집니다 (이제 셀의 높이를 직접 계산하는 방법을 알고 있기 때문입니다).


답변

autoLayout 제약 조건과 UITableViewAutomaticDimension을 사용하는 경우이 오류는 코드에서 높이를 재정 의하여 버릴 수있는 잘못된 문제가 아닙니다. 이는 필요한 적절한 수직 제약 조건이 없기 때문에 셀 높이를 자동으로 결정하는 것이 작동하지 않음을 의미합니다.

나와 같고이 오류가 발생하고 오류를 발생시킨 셀을 식별하는 데 도움이 필요한 경우 ‘heightforRowAtIndexPath’메서드가 반환되기 직전에 다음 줄을 추가 할 수 있습니다.

NSLog(@"Section %ld Row %ld", (long)[indexPath section], (long)[indexPath row]);

이렇게하면 긴 섹션 및 행 목록이 인쇄되지만 오류를 발생시킨 특정 셀 바로 다음에 오류가 나타나며 문제를 일으키는 셀을 신속하게 식별하고 그에 따라 제약 조건을 수정할 수 있습니다. 이것은 특히 정적 셀에 유용합니다. autoLayout 및 자동 셀 높이를 사용하지 않는 경우 수동으로 입력 한 숫자로 높이를 재정의하면 작동하지만 기본적으로 이러한 기능을 비활성화하므로 활용하려는 경우 매우 좋지 않은 솔루션입니다.

이전에 ‘heightForRowAtIndexPath’메서드를 사용하지 않았지만 UITableViewAutomaticDimension 설정을 실행 취소하지 않고이 오류를 디버그하려면 다음을 코드에 추가하면됩니다.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Section %ld Row %ld", (long)[indexPath section], (long)[indexPath row]);
    return UITableViewAutomaticDimension;
}


답변

자동 레이아웃을 사용하고 각 테이블 뷰 셀의 행 높이 값을 지정하지 않고 대신 “기본값”값을 그대로두면이 문제를 일으키는 XCode 6.1에 버그가있는 것 같습니다. 모든 셀에 대해 행 높이 옆에있는 “사용자 지정”확인란을 선택하기 만하면 경고가 사라집니다.


답변

예, 테이블보기 셀의 항목에 대해 수평 제한 만있는 경우에도 모든 제한이 “행복”합니다. 나는 같은 문제가 있었다. 수직 구속도 추가해야합니다. 그렇게하면 경고가 사라집니다.


답변

제약 조건은 레이아웃 목적으로는 만족할 수 있지만 자동 행 높이 목적으로는 만족스럽지 않습니다. 행복한 레이아웃은 내용이 모호함없이 레이아웃 될 수 있음을 의미합니다. 그것은 Interface Builder의 검사를 만족시킬 것입니다.

자동 행 높이에 대한 행복한 레이아웃은 위와 더불어 셀 하단에도 제약 조건을 포함한다는 것을 의미합니다.

추가 정보 : 제약 조건이 높이 0을 모호하게 제안하는 경우 감지


답변

Table View 크기 검사기에서 Row Height 43 (또는 <> 44)을 사용했는데 오류가 사라졌습니다. 44를 사용하면 오류가 발생합니다. Xcode 버전 6.0.1.

-이 답변은 중재자에 의해 제거되었으므로 문제가 해결됩니다. 이것은 나를 위해 문제를 해결하고 다른 사람들에게도 그렇게 할 수 있습니다. 다시 삭제하지 않으시겠습니까?