1

Using Auto Layout in UITableView for dynamic cell layouts & variable row heights에 설명 된 동적 셀 높이의 자동 레이아웃 방식을 사용하고 있습니다. 이것은 지금까지 작동합니다. 지금은 UIPopoverController에 내 UITableView을 선물하고 있습니다. 이제 흥미로운 부분을 살펴 보겠습니다. 다른 뷰 컨트롤러에서이 팝 오버를 제공합니다. 첫 번째보기 컨트롤러에서는 모든 것이 예상대로 작동합니다. 나는 또한이 팝 오버를 제공하는 두 번째 뷰 컨트롤러로 전환하는 경우, 팝 오버는 (! 심지어 구분선없이) 완전히 비어 있고 나는 다음과 같은 오류가 발생합니다 :자동 크기 조정 마스크에 따라 UITableViewCellContentView 너비가 항상 0입니다.

Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7a706fa0 H:|-(8)-[UILabel:0x7a707760] (Names: '|':UITableViewCellContentView:0x7a707ba0)>", 
    "<NSLayoutConstraint:0x7a707060 H:[UILabel:0x7a707760]-(8)-| (Names: '|':UITableViewCellContentView:0x7a707ba0)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7a706970 h=--& v=--& H:[UITableViewCellContentView:0x7a707ba0(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7a707060 H:[UILabel:0x7a707760]-(8)-| (Names: '|':UITableViewCellContentView:0x7a707ba0)> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

이제 우리는이 부분에주의 :

"<NSAutoresizingMaskLayoutConstraint:0x7a706970 h=--& v=--& H:[UITableViewCellContentView:0x7a707ba0(0)]>" 

자동 조절 마스크에 따라 UITableViewCellContentView의 너비가 0이라고합니다. 하지만 전에 다른 뷰 컨트롤러에서 같은 코드가 작동합니다. 그리고 popover는 뷰 컨트롤러의 내 설정과 독립적이어야합니다. 다른 프로젝트에서 동작을 복제하려고했지만 할 수 없습니다. 이것은 또한 iOS 7에서만 나타납니다. iOS 8에서는 모든 것이 잘 작동합니다. 나는 또한 자동 레이아웃에서 벗어나려고 노력했다. 그런 다음 내용이 표시된다 (그러나 원하는 방식으로 표시되지는 않는다). 내가 할 수있는 유일한 옵션은 봄과 스트럿으로 돌아가는 것입니다 ... 원한다면 C#으로 제 코드를 제공 할 수 있지만 질문을 더 읽기 쉽게하기 위해 생략했습니다.

왜 이런 이유가있을 수 있습니까? 이런 경험을 한 사람이 있습니까?

답변

2

하루를 검색 한 후 기본 실수였습니다. 나는 팝 오버하지 전에 컨트롤러를 가지고 있기 때문에 다음 코드 줄은 여전히 ​​있었다 :

myViewControllerInPopup.View.TranslatesAutoresizingMaskIntoConstraints = false; 

가 나는 팝 오버를 인스턴스화 뷰 컨트롤러에이 있었다. 이 줄을 제거하면 모든 것이 예상대로 작동합니다.