Tôi đang đối mặt với một vấn đề thực sự kỳ lạ trên UITableView của mình. Tôi có một số ô khác nhau mà tôi muốn hiển thị trên dạng xem bảng giống như nguồn cấp tin tức.Làm thế nào có thể chiều cao UITableViewCellContentView khác với heightForRowAtIndexPath:
Và tôi gặp sự cố với ô sau khi sử dụng lại. Ô chứa hai hình ảnh, hai nhãn và chế độ xem với các nút chia sẻ/thích/nhận xét. Tôi sẽ cố gắng rút ra nó, nhưng tôi không chắc chắn nó sẽ là khá:
-------------------------------------------------
| | __ ____________________________ |
| | |_2| | | |
| | | 3 | |
| | | | |
| 1 | |____________________________| |
| | |
| |_______________________________________|
| | |
| | 4 |
|_______|_______________________________________|
| |
| 5 |
|_______________________________________________|
1 : objectImage
2 : subjectImage
3 : titleLabel
4 : commentLabel
5 : actionsView
Và những hạn chế của tôi là:
"H:|-0-[objectImage(60)]-7-[subjectImage(30)]-7-[titleLabel]-7-|"
"H:|-0-[objectImage(60)]-0-[commentLabel]-0-|"
"H:|-0-[actionsView]-0-|"
"V:|-0-[objectImage(>=35)]-0-[actionsView(44)]-0-|"
"V:|-7-[subjectImage(30)]"
"V:|-7-[titleLabel(>=46)]-7-[commentLabel(>=35)]-0-[actionsView(44)]-0-|"
Và mỗi khi tế bào được rút ra, tôi thay đổi ràng buộc này:
"V:[commentLabel(%0.2f)]"
Các ô hiển thị hoàn hảo lần đầu tiên.
Nhưng, vấn đề tôi có là tại một điểm, sau khi tái sử dụng một số (tôi không thể tái tạo nó mỗi lần) ứng dụng bị treo do vấn đề ràng buộc. Đây là ngoại lệ:
"<NSLayoutConstraint:0x205a75b0 V:[UILabel:0x1ef31430(105)]>",
"<NSLayoutConstraint:0x1ef34440 V:[UILabel:0x1ef31430]-(0)-[UIView:0x1ef2fe50]>",
"<NSLayoutConstraint:0x1ef34380 V:[UILabel:0x1ef31250]-(7)-[UILabel:0x1ef31430]>",
"<NSLayoutConstraint:0x1ef33900 V:|-(7)-[UILabel:0x1ef31250] (Names: '|':UITableViewCellContentView:0x1ef2bf50)>",
"<NSLayoutConstraint:0x1ef34340 V:[UILabel:0x1ef31250(>=46)]>",
"<NSLayoutConstraint:0x1efV:[UIView:0x1ef2fe50]-(0)-| (Names: '|':UITableViewCellContentView:0x1ef2bf50)>",
"<NSLayoutConstraint:0x1ef331d0 V:[UIView:0x1ef2fe50(44)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1ef36f90 h=--& v=--& V:[UITableViewCellContentView:0x1ef2bf50(147)]>"
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1ef34380 V:[UILabel:0x1ef31250]-(7)-[UILabel:0x1ef31430]>
Vấn đề là các hạn chế [UITableViewCellContentView: 0x1ef2bf50 (147)] là không đúng.
là gì kỳ lạ là heightForRowAtIndexPath: trả về giá trị đúng mà là 217.
Và những gì tôi không hiểu là chiều cao của UITableViewCell là đúng!
(lldb) po 0x1ef2bf50
$0 = 519225168 <UITableViewCellContentView: 0x1ef2bf50; frame = (0 0; 320 147); gestureRecognizers = <NSArray: 0x1ef30a20>; layer = <CALayer: 0x1ef2a3d0>>
(lldb) po [0x1ef2bf50 superview]
$1 = 0x1ef30e40 <NewsSubjectCommentCell: 0x1ef30e40; baseClass = UITableViewCell; frame = (0 1055; 320 217); hidden = YES; autoresize = W; layer = <CALayer: 0x1ef25e10>>
Vì vậy, tôi không hiểu thế nào là nó có thể là hạn chế chiều cao của UITableViewCellContentView là 147. Đây là chiều cao của một tế bào cùng loại, nhưng nó phải được thay đổi để 209, phải không?
Vì vậy, nếu bạn có bất kỳ thông tin chi tiết về cách điều này có thể xảy ra (có thể tôi đã làm điều gì đó sai), tôi rất vui.
Cảm ơn,
Bạn đã tìm thấy giải pháp chưa? Tôi đang gặp vấn đề tương tự. –
Không, giải pháp (xấu) mà tôi đã sử dụng là thêm 1 vào chiều cao ô trong heightForRowAtIndexPath: hàm –
http://stackoverflow.com/questions/12610783/auto-layout-still-required-after-executing-layoutsubviews- with-uitableviewcel/39136021 # 39136021 – qingqinghebiancao