2013-10-30 20 views
11

Bắt đầu di chuyển từ bố cục lò xo và cấu trúc đến bố cục tự động và có một số câu hỏi liên quan đến cài đặt "Kích thước nội tại".Sự khác nhau về kích thước nội tại so với giới hạn chiều rộng/chiều cao hệ thống là gì?

Nếu bạn đặt "Kích thước nội tại" của một số chế độ xem thành "Trình giữ chỗ" và đặt một số giá trị chiều rộng và chiều cao thì chế độ xem sẽ không mở rộng và sẽ ở kích thước cố định. Nhưng nếu chúng ta đặt "Kích thước nội tại" thành "Mặc định (Hệ thống đã xác định)" thì hệ thống sẽ quyết định và mở rộng khung nhìn nếu cần trong thời gian chạy.

Tuy nhiên, chúng tôi có thể đặt rõ ràng giới hạn hệ thống chiều rộng và chiều cao cho chế độ xem bằng cách sử dụng Ctrl + Kéo. Trong trường hợp này, sẽ có các ràng buộc về chiều rộng và chiều cao hệ thống và các giá trị giữ chỗ const. Tôi đang xem xét mã hiện có và cố gắng hiểu là nó là một lỗi và hạn chế chiều rộng và chiều cao hệ thống dự phòng cần được loại bỏ HOẶC có một số logic ẩn khác. Tuy nhiên, Xcode không hiển thị bất kỳ cảnh báo và vv trong giao diện điều khiển trong thời gian chạy. Dưới đây là một màn hình in của dự án trình diễn:

enter image description here

Trả lời

26

Khi bạn thiết lập kích thước bên trong để "giữ chỗ", bạn yêu cầu hệ thống bố trí Xcode rằng quan điểm của bạn sẽ có kích thước phụ thuộc vào nội dung của nó (như một nhãn có thể được phụ thuộc vào nội dung văn bản của nó). Hệ thống chỉ biết và duy trì các kiểu quan điểm riêng của nó với kích thước nội tại. Nếu bạn muốn có một trải nghiệm tương tự với chế độ xem của riêng bạn, hãy xem xét chế độ xem như thể nó có kích thước nội tại. Sau đó, bạn thiết lập các ràng buộc của mình như thể chế độ xem sẽ tăng hoặc thu nhỏ tùy thuộc vào nội dung của nó. Cuối cùng, bạn triển khai phương thức intrinsicContentSize để tính toán và trả về kích thước chính xác của nội dung. Nếu thay đổi nội dung và tính toán mới, bạn hãy gọi invalidateIntrinsicContentSize trên chế độ xem của bạn. Tùy thuộc vào cách bạn đã thiết lập các ràng buộc của bạn, khung nhìn của bạn sẽ phát triển và/hoặc thu nhỏ, hoặc nó sẽ là tĩnh (như bạn có thể thiết lập các ràng buộc chiều rộng và chiều cao trên nhãn, và nó vẫn tĩnh).

+0

Hmm, đặt "Trình giữ chỗ" có chiều rộng và chiều cao tùy chỉnh không quy mô UILabel đối với nội dung của nó ("phụ thuộc vào nội dung của nó"). – Centurion

+0

Nếu bạn thêm các ràng buộc chiều rộng và chiều cao, nó sẽ không mở rộng nhãn. –

+0

Tôi vừa tạo dự án mới và thêm nhãn có khung lớn hơn. Sau đó, đặt "Trình giữ chỗ" và chọn "Không có" trong các hộp kiểm chiều rộng và chiều cao. Không có gì xảy ra và nhãn không được thay đổi kích thước để phù hợp với nội dung của nó. Tôi đã không đặt bất kỳ ràng buộc nào. – Centurion

1

nếu bạn quen thuộc với wrap_content từ Android, số intrinsicContentSize giống với wrap_content.

0

Mỗi chế độ xem có chứa nội dung đều có thể tính toán kích thước nội dung nội tại của nó. Kích thước nội dung nội tại được tính bằng một phương thức trên mỗi cá thể UIView. Phương thức này trả về một cá thể CGSize

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