2015-09-29 17 views
8

tôi tạo ra một XIB trong Xcode và thêm một cái nhìn đơn giản như là một subview:động thay đổi kích thước xem gốc của XIB với kích thước của nội dung của nó với Autolayout

XIB with rootview and subview

Những gì tôi muốn đạt được là subview có kích thước cố định và rootview tự động thay đổi kích thước với kích thước của subview rằng, để lại một lợi nhuận 20,0 xung quanh nó:

Resized XIB

Vì vậy, tôi thêm một chiều rộng cố định và chiều cao hạn chế cố định vào subvi ew. Sau đó, tôi thêm bốn trở ngại cho lề 20,0:

Constraints View showing constraints

Khi SuperView không có bất kỳ trở ngại có thể không nên mơ hồ và cũng không hạn chế mâu thuẫn: Tôi mong chờ superview để thu nhỏ xuống để phù hợp với các ràng buộc. Tuy nhiên, Xcode phàn nàn:

Warnings

Những hạn chế này sẽ chỉ là mâu thuẫn nếu rootview có kích thước cố định và đó dường như là trường hợp. Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể làm cho chế độ xem gốc của XIB linh hoạt để nó tự động điều chỉnh kích thước của nó để phù hợp với nội dung của nó?

(Is rằng thậm chí có thể với giao diện Builder?)

+0

Bất kỳ ai gặp vấn đề này, xin đừng lo lắng. Để ngăn chặn các lỗi XIB vừa thiết lập kích thước thích hợp của khung nhìn. Sau đó, khi bạn sẽ tạo ra khung nhìn, nó sẽ được thay đổi kích cỡ để đáp ứng các ràng buộc một cách tự động. – kelin

Trả lời

4

Làm thế nào tôi có thể làm cho rootview của một XIB linh hoạt để nó tự động điều chỉnh kích thước của nó để phù hợp với nội dung của nó?

Không thể xây dựng Giao diện.

Khi SuperView không có bất kỳ trở ngại có thể không nên mơ hồ cũng không hạn chế mâu thuẫn

của nó không chỉ là một cái nhìn siêu. Nó cũng là một objet trong nib. Chúng tôi xác định kích thước mô phỏng cho các chế độ xem như vậy. Điều này có thể được sử dụng để làm im lặng các lỗi. Nhưng một lần nữa đây chỉ là mô phỏng.

Gốc này có phải là chế độ xem bộ điều khiển chế độ xem không? Nếu có, tôi không hiểu tại sao bạn cố gắng khắc phục giá trị của nó là 280 và chiều cao là 168.

Nếu chế độ xem này là chế độ xem tùy chỉnh mà bạn sẽ thêm vào chế độ xem 'cha mẹ' khác. Sau đó, bạn nên thay đổi kích thước mô phỏng của bạn thành 280 và chiều cao 168 và khi thêm phần này dưới dạng chế độ xem con, bạn cần thêm hai ràng buộc khác để định vị chế độ xem gốc này trong chế độ xem 'gốc'.

+0

Vấn đề là: Chế độ xem gốc được cho là ô xem bảng và nếu tôi muốn sử dụng nó với autolayout, tôi cần khung nhìn gốc để thích ứng với các ràng buộc để sau đó tôi có thể nhận được chiều cao của khung để trả về từ ' tableView: heightForRowAtIndexPath: 'phương thức. – Mischa

+2

Cảm ơn câu trả lời của bạn! Tôi thực sự tự hỏi tại sao điều này là không thể ... – Mischa

+0

Nếu bạn đang cố gắng để có được chiều cao di động thông qua điều này. Bạn đang đi sai hướng. – BangOperator

0

Tôi nghĩ rằng bạn quên để thiết lập tự động thay đổi kích thước mặt nạ cho toàn bộ thùng chứa

self.yourViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
+0

Không, bởi vì: 1) Trong câu hỏi của tôi, tôi đã đề cập đến một 'UIView', không phải là một' UIViewController'. 2) Mã này sẽ chỉ có hiệu lực trong thời gian chạy, không phải trong Trình tạo giao diện bởi vì không có thứ gì như một bộ điều khiển ** xem ** IB_DESIGNABLE **. 3) Như @BangOperator đã chỉ ra trong câu trả lời của mình * Giao diện Builder * luôn luôn sử dụng một khung cố định cho xem gốc của bất kỳ tập tin IB, nó có thể là một XIB hoặc một storyboard. – Mischa

0

Bạn có thể làm điều này bằng cách chỉnh sửa xib bằng tay, ví dụ để thiết lập một hạn chế chiều cao (trong trường hợp của tôi đó là một sự bất bình đẳng để thiết lập chiều cao tối thiểu):

  1. thêm một hạn chế đối với một subview cho chiều cao
  2. mở xib như một tập tin văn bản
  3. tìm ra khó khăn quý khách dded (ví dụ bằng cách Cmd-F'ing với giá trị của chiều cao)
  4. cắt và dán nó vào xem gốc của phần hạn chế
  5. Mở xib trong xây dựng giao diện một lần nữa
  6. Ràng buộc xuất hiện và bạn có thể chỉnh sửa nó giống bình thường.
Các vấn đề liên quan