2015-09-21 21 views
6

Trong ứng dụng của tôi, tôi có tùy chỉnh tableViewCells với tỷ lệ cố định (16x9). Để đạt được điều đó, tôi đặt một khung nhìn trong ô, cố định nó vào khung nhìn cha mẹ của nó (mặc dù tôi đã làm nó trong trình xây dựng giao diện: V/H:|-[innerView]-|). Ngoài ra, tôi đặt một ràng buộc tỷ lệ vào nó.UITableViewAutomaticDimension không hoạt động bình thường trong iOS 9

Trong bảng của tôiViewController Tôi đang sử dụng UITableViewAutomaticDimension làm chiều cao ô bảng.

Chiều cao hàng ước tính là 180, đó là kích thước chính xác mà ô sẽ có trên màn hình rộng 320px (như tôi, như bạn có thể thấy, thực hiện).

Tôi vẫn đang triển khai 8.4, nhưng khi chạy dự án trên Thiết bị có iOS 9, tôi nhận được rất nhiều cảnh báo bố cục tự động, mặc dù mọi thứ hoạt động tốt và trông hoàn hảo.

Cảnh báo là hoàn toàn đúng. Có hai ràng buộc mà tôi không muốn - những thứ mà iOS tự thêm vào.

2015-09-29 11:24:57.771 app[1039:324736] 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:0x147d3e0d0 UIView:0x14901ff70.height == 0.5625*UIView:0x14901ff70.width>", 
    "<NSLayoutConstraint:0x147dd0210 H:|-(0)-[UIView:0x14901ff70] (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x147deeca0 V:|-(0)-[UIView:0x14901ff70] (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x149053c30 V:[UIView:0x14901ff70]-(0)-| (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x147dbc2b0 H:[UIView:0x14901ff70]-(0)-| (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x149070800 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x14901f960(179.5)]>", 
    "<NSLayoutConstraint:0x1490707b0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x14901f960(320)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x147d3e0d0 UIView:0x14901ff70.height == 0.5625*UIView:0x14901ff70.width> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

Điều duy nhất tôi thấy ở đây là thiếu 0,5 pixel mà iOS đã loại trừ bằng cách nào đó kỳ diệu.

+0

Điều duy nhất tôi thấy ở đây là thiếu 0,5 pixel mà iOS trừ đi bằng cách nào đó kỳ diệu? Thông tin này ở đâu? – BangOperator

+0

@somexyz đọc các ràng buộc đã đăng nhập: 'V: [UITableViewCellContentView: 0x14da0ff60 (179.5)]' –

Trả lời

1

Vấn đề là hai ràng buộc mà tableview tự động thêm. UIView-đóng gói-bố trí-Chiều cao và chiều rộng có lẽ là chiều cao và chiều rộng xem bảng tính cho các tế bào trong tải ban đầu, dựa trên những hạn chế của tế bào tại thời điểm đó.

"<NSLayoutConstraint:0x149070800 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x14901f960(179.5)]>", 
"<NSLayoutConstraint:0x1490707b0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x14901f960(320)]>" 

Như những ưu tiên cho những khó khăn này là 1000 gì bạn có thể làm là giảm chiều cao và chiều rộng hạn chế của bạn ưu tiên và để cho các kích thước đóng gói được áp dụng khi cần thiết (tại tải).

+0

Điều này đã thực sự giúp đỡ. Cảm ơn bạn đã giải thích ngắn gọn về thời gian (được tải). Bạn có thể nói điều gì đó về sự khác biệt giữa iOS 8 và iOS 9 không ?? Tôi chắc chắn cần/muốn biết lý do tại sao chỉ có iOS 9 là làm điều đó khác nhau ... –

+0

Tôi không thực sự biết những gì thay đổi trong công cụ bố trí tự động trong iOS 9 nhưng điều này cũng xảy ra trong iOS 8 là tốt. – Istvan

+0

Có. Điều này có thể đã xảy ra trong iOS 8 là tốt, như xa như bạn đang nói về cảnh báo này bố trí tự động nhiều hơn hoặc ít hơn mục đích chung. Trong trường hợp của tôi cảnh báo này chỉ xuất hiện trong iOS9, không phải 8, do đó tôi đã mở câu hỏi này. –

1

Dường như bạn đã thêm hai giới hạn tỷ lệ được thêm vào hai chế độ xem khác nhau.

Một rằng nên có mặt ở đó là,

<NSLayoutConstraint:0x14d939e00 UIView:0x14da107f0.width == 
1.77778*UIView:0x14da107f0.height> 

có địa chỉ bộ nhớ 0x14d939e00 gia tăng đối với UIView với địa chỉ 0x14da107f0.

Cách khác là vi phạm.

<NSLayoutConstraint:0x14c5eae90 UIView:0x14c5ead30.height == 
    0.5625*UIView:0x14c5ead30.width> 

Cái này được thêm vào UIView (0x14c5ead30). Tìm kiếm khung nhìn này và loại bỏ ràng buộc tỷ lệ này.

+0

Xin lỗi, tôi đã trộn lẫn phần đầu của phần cuối với một bản ghi khác. Đây là lý do tại sao cả địa chỉ lẫn giá trị không khớp với nhau. Chỉ có một hạn chế và vì nó hoạt động tốt trong iOS 8, tôi không nghĩ đó là vấn đề bố cục tự động chung. –

Các vấn đề liên quan