Tôi đang sử dụng systemLayoutSizeFittingSize
để có kích thước nhỏ nhất cho lớp con chế độ xem tùy chỉnh đáp ứng các ràng buộc nội bộ của nó.Ràng buộc "UITemporaryLayoutHeight" của iOS
let someView = SomeView()
someView.setNeedsUpdateConstraints()
someView.setNeedsLayout()
someView.layoutIfNeeded()
let viewSize = someView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
println(viewSize) // PRINTS (0.0, 96.0) WHICH IS RIGHT!
tôi nhận được giá trị chính xác nhưng tôi cũng nhận được một cảnh báo Unable to simultaneously satisfy constraints
:
"<NSLayoutConstraint:0x7ff16b753190 '_UITemporaryLayoutHeight' V:[ProjectName.SomeView:0x7ff16b772210(0)]>",
"<NSLayoutConstraint:0x7ff16b75de50 UIImageView:0x7ff16b76eff0.top == ProjectName.SomeView:0x7ff16b772210.topMargin>",
"<NSLayoutConstraint:0x7ff16b7653f0 UIImageView:0x7ff16b76eff0.bottom <= ProjectName.SomeView:0x7ff16b772210.bottomMargin>"
Dưới đây là SomeView
UIView lớp con tôi.
Nó chỉ chứa một hình ảnh 80x80 được gắn vào lề trên cùng, bên trái và dưới cùng. (Tôi đang sử dụng PureLayout để viết các ràng buộc).
Bây giờ rõ ràng chế độ xem này sẽ có chiều cao cố định là 96 (80 + 8x2 đối với lề) nhưng về mặt lý thuyết nó có thể kéo dài nếu các thay đổi của nó thay đổi kích thước.
Bất kỳ ý tưởng nào? Tìm kiếm google cho UITemporaryLayoutHeight
(hoặc Width) mang đến cho 0 kết quả ...
class SomeView: UIView {
let imageView = UIImageView()
var constraintsSet = false
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.lightGrayColor()
imageView.backgroundColor = UIColor.darkGrayColor()
addSubview(imageView)
}
override func updateConstraints() {
if(!constraintsSet) {
imageView.autoPinEdgeToSuperviewMargin(.Top)
imageView.autoPinEdgeToSuperviewMargin(.Left)
imageView.autoPinEdgeToSuperviewMargin(.Bottom, relation: NSLayoutRelation.GreaterThanOrEqual)
imageView.autoSetDimension(.Width, toSize: 80.0)
imageView.autoSetDimension(.Height, toSize: 80.0)
constraintsSet = true
}
super.updateConstraints()
}
}
Như một lưu ý: Tôi thực sự muốn nghe lời giải thích từ Apple về những _UITemporaryLayoutHeight và những thứ tương tự bật lên trong giao diện điều khiển. –
Cảm ơn điều này dường như giải quyết vấn đề! – LorTush
Ai đó hãy hỏi tại các phòng thí nghiệm của WWDC và báo cáo lại. Đoán của tôi: họ đặt các ràng buộc ở đó để làm cho hệ điều hành rõ ràng gọi ra quan điểm của bạn vì không hài lòng về việc bị thu nhỏ về 0 kích thước. –