2016-03-29 23 views
21

Bối cảnhLàm cách nào để đặt kích thước nội dung nội dung của chế độ xem tùy chỉnh trong Swift?

Tôi đang tạo nhãn dọc để sử dụng với tập lệnh tiếng Mông Cổ truyền thống. Trước khi tôi chỉ xoay một số UILabel nhưng có một số vấn đề hiệu suất và các biến chứng khác với điều này. Bây giờ tôi đang làm việc trên một nhãn hiệu từ đầu. Tuy nhiên, tôi cần nhãn dọc để nói bố cục tự động khi chiều cao của nó điều chỉnh (dựa trên độ dài chuỗi).

Những gì tôi đã đọc

Tôi đọc tài liệu Intrinsic Content SizeViews with Intrinsic Content Size. Tuy nhiên, đây là nhiều hơn về cách sử dụng nó và không phải cách xác định nó trong một chế độ xem tùy chỉnh.

Tìm kiếm "ios kích thước nội dung bên trong cho một cái nhìn tùy chỉnh" chỉ mang lại cho tôi

trong Stack Overflow. Câu hỏi cụ thể này thậm chí không cần kích thước nội tại nội tại vì quan điểm của họ chỉ là một tập hợp các khung nhìn tiêu chuẩn.

Những gì tôi đang cố gắng

Những gì tôi đang cố gắng là câu trả lời của tôi dưới đây. Tôi đang thêm Q & Một cặp này để người khác không mất nhiều thời gian để tìm câu trả lời vì nó đã mang lại cho tôi các từ khóa tìm kiếm mà tôi đã sử dụng.

Trả lời

53

Đặt kích thước nội dung nội tại của chế độ xem tùy chỉnh cho phép bố cục tự động biết mức độ quan trọng của chế độ xem đó. Để thiết lập, bạn cần ghi đè intrinsicContentSize.

override var intrinsicContentSize: CGSize { 
    return CGSize(width: x, height: y) 
} 

Sau đó gọi

invalidateIntrinsicContentSize() 

Bất cứ khi nào giao diện tùy chỉnh của bạn bên trong thay đổi kích thước nội dung và khung cần được cập nhật.

Ghi chú

+1

Swift 3: http://stackoverflow.com/a/38881383/1161948 – ThisClark

3

Dựa trên câu trả lời tuyệt vời trên,

ví dụ về một "cái nhìn với chiều cao thực chất" ...

@IBDesignable 
class HView: UIView { 
    @IBInspectable var height: CGFloat = 100.0 
    override var intrinsicContentSize: CGSize { 
     return CGSize(width: 99, height: height) 
     // if using in, say, a vertical stack view, the width is ignored 
    } 
} 

enter image description here

mà bạn có thể thiết lập như là một inspectable

enter image description here

Kể từ khi nó có một chiều cao thực chất, nó có thể (ví dụ) được ngay lập tức lắp vào một cái nhìn chồng trong mã:

stack?.insertArrangedSubview(HView(), at: 3) 

Ngược lại, nếu đó là một cái nhìn bình thường không có chiều cao bên trong, bạn sẽ phải để thêm một neo chiều cao hoặc nó sẽ sụp đổ:

let v:UIView = HView() 
v.heightAnchor.constraint(equalToConstant: 100).isActive = true 
stack?.insertArrangedSubview(v, at: 3) 

trong trường hợp đặc biệt của một cái nhìn chồng, bạn chỉ phải lo lắng về người duy nhất neo (để xem ngăn xếp theo chiều dọc, chiều cao) để thiết lập các tác phẩm chiều cao bên trong hoàn hảo; vì chiều cao nội tại thực sự có nghĩa là neo chiều cao cụ thể sẽ được đặt tự động nếu cần. (Hãy nhớ rằng trong tất cả các trường hợp thông thường của một chế độ xem phụ, nhiều neo khác là cần thiết.)

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