2012-08-30 13 views
8

Tôi có một ngòi có chức năng tự động trả lời có chứa chế độ xem của trình điều khiển chế độ xem và, riêng biệt, một cửa sổ có chế độ xem trình giữ chỗ để thêm chúng vào. Trình giữ chỗ có các ràng buộc liên quan đến superview và các khung nhìn khác trong cửa sổ và trước khi liên quan đến trình điều khiển xem của tôi, tôi có phần giữ chỗ thay đổi kích thước với cửa sổ theo cách tôi muốn. Sau đó tôi tải nib và thêm xem cấp cao nhất của nó làm subview của trình giữ chỗ, và tôi cũng tự tạo các ràng buộc để giữ cho nó liên kết với các cạnh của trình giữ chỗ.Autolayout đang thay đổi kích thước cửa sổ của tôi

Tất cả đều tốt và tôi đang sử dụng mẫu này trong một số trường hợp trong ứng dụng của mình, nhưng trong một số trường hợp đó, sau khi thêm chế độ xem cửa sổ của tôi được thay đổi kích thước! Nó co lại thành kích thước tối thiểu cho chế độ xem được thêm thay vì chế độ xem mở rộng thành kích thước hiện tại của cửa sổ.

Cho đến nay cách duy nhất tôi tìm thấy để ngăn chặn điều này là khi thêm chế độ xem và tạo các ràng buộc của nó, cũng đặt khung của khung nhìn để cho nó kích thước ban đầu cho trạng thái hiện tại của trình giữ chỗ và cửa sổ. Đó là ok một số thời gian, nhưng tôi muốn để có thể xác định các ràng buộc phức tạp hơn mà chỉ đơn giản là sắp xếp từng cạnh để một người giám sát giữ chỗ. Tôi không muốn mã số học khung cho mỗi trường hợp.

Có ai biết điều gì đang xảy ra không? Nếu cửa sổ đã quyết định kích thước của trình giữ chỗ của tôi, không phải theo cách khác, tôi phải làm gì khi thêm chế độ xem con để làm cho kích thước cửa sổ hiện tại vẫn được ưu tiên?

Tôi đã thấy trình đơn bật lên trong cửa sổ IB của Xcode dường như là về những hạn chế chỉ ảnh hưởng đến các bản xem trước và cũng là giám sát (được đặt trước đây cho tất cả các ngòi bút của tôi), là những gì đang xảy ra liên quan đến chức năng này? Tôi chưa tìm thấy gì khác về điều đó.

+0

Có thể bạn không chỉ cần thiết lập một hạn chế chiều rộng trên diện tùy chỉnh (placeholder)? – codingFriend1

+1

Đã chỉnh sửa bài đăng của tôi để làm rõ hơn, tôi hy vọng. Trình giữ chỗ của tôi đã có các ràng buộc để cung cấp cho nó hành vi đúng khi thay đổi kích thước cửa sổ. Thêm ràng buộc kích thước cố định vào nó khi thêm subview sẽ phá vỡ điều đó. –

+0

Nếu các ràng buộc của bạn là chính xác thì kích thước cửa sổ sẽ hoạt động. –

Trả lời

9

Bạn muốn đặt mức ưu tiên kháng nén cho một số ít hơn NSLayoutPriorityWindowSizeStayPut là 500. Điều này có nghĩa là kích thước của cửa sổ được ưu tiên hơn kích thước của chế độ xem.

Bạn có thể đặt cài đặt này từ trình kiểm tra kích thước IB.

Compression resistance priority

Hoặc bạn có thể thiết lập nó lập trình với -[NSView setContentCompressionResistancePriority:forOrientation:]

+0

Có vẻ như đây là vấn đề ưu tiên. Tuy nhiên, trong trường hợp nhắc nhở đăng bài này, cửa sổ lớn hơn so với những gì mà subview được thêm vào cần thiết. Các subview sẽ không có được nén, nhưng thay vì mở rộng (vấn đề là nó đã không mở rộng nhưng thay vì cửa sổ bị thu hẹp). Điều này có nghĩa là ưu tiên kháng nén sẽ không đi vào hoạt động? Phải ưu tiên Nội dung ưu tiên thay thế cũng được đặt thành <500 hoặc tôi có nhầm lẫn không? (Tôi đã làm việc với bố cục tự động trong gần một năm và tôi vẫn thấy khó hình dung mục đích của 2 bộ ưu tiên đó). –

+0

vâng, bạn chính xác, mức độ ưu tiên nội dung ưu tiên phải <500 thay thế.Ưu tiên kháng nén được sử dụng khi làm việc mà khung nhìn sẽ co lại khi giảm không gian và nội dung ôm khi tăng không gian. Với cửa sổ ở lại đặt ưu tiên 500, thì bất cứ điều gì <500 có nghĩa là kích thước cửa sổ thắng,> 500 lượt xem thắng – iain