2014-10-28 13 views
6

Tôi có một UILabel bên trong một UIScrollView mà tôi đang cố gắng bọc từ. Tôi muốn sử dụng AutoLayout cho cấu hình bố cục. Các từ UILabel kết thúc tốt đẹp khi nó không nằm trong một UIScrollView. Tôi chỉ cần thiết lập số lượng dòng 0 và thiết lập chế độ ngắt dòng để bọc từ.Nhãn không dán từ bên trong UIScrollView với AutoLayout

Tuy nhiên, khi tôi đặt UILabel bên trong một UIScrollView, từ gói ngừng hoạt động. Tôi đã kiểm tra "Dynamic UILabel height inside UIScrollView with AutoLayout" và "Correctly Size UILabel inside UIScrollView using Interface Builder and Autolayout?", nhưng cả hai câu hỏi đều không có câu trả lời giúp tôi.

Tôi có set up a test project minh họa chính xác những gì tôi đang nói về nếu ai đó muốn xem.

+0

Thực ra câu trả lời cho các câu hỏi bạn trích dẫn chính xác là những gì bạn cần. Vấn đề là bạn không nghe những gì họ nói với bạn. – matt

Trả lời

10

Lý do là các ràng buộc bên trong chế độ xem cuộn, được ghim vào chế độ xem cuộn, không có nghĩa là ý của bạn. Họ phải làm với việc xác định contentSize của chế độ xem cuộn từ trong ra ngoài; họ không tự xác định kích thước của những thứ bên trong scrollview từ bên ngoài. Xem câu trả lời của tôi ở đây: https://stackoverflow.com/a/13548039/341994

Giải pháp đơn giản nhất trong trường hợp của bạn là sử dụng chế độ xem nội dung trung gian để bạn có phân cấp này:

scroll view 
    content view 
     label 

Bây giờ cung cấp cho chế độ xem nội dung chiều rộng và chiều cao tuyệt đối và ghim tất cả bốn mặt vào chế độ xem cuộn. Bây giờ nhãn sẽ hoạt động như bạn mong đợi. Chế độ xem nội dung có đủ ràng buộc cả hai để đặt kích thước của riêng nó hoàn toàn và để hạn chế chế độ xem cuộn của contentSize từ bên trong. Các ràng buộc trên nhãn, trong khi đó, không phải là dạng xem cuộn nhưng đối với khung nhìn nội dung, và vì khung nhìn nội dung có kích thước cố định và là một khung nhìn bình thường (không phải dạng xem cuộn), các ràng buộc trên nhãn làm những gì bạn mong đợi .

+0

Nếu bạn xem kỹ dự án bạn đã đăng, bạn sẽ thấy Xcode thực sự đang nói cho bạn biết điều này. Có một cảnh báo về cấu trúc bố trí của chế độ xem cuộn. Cảnh báo đó đang nói cho bạn điều tương tự tôi đang nói với bạn ở đây. Đừng bỏ qua cảnh báo bố cục tự động trong Xcode!Họ _mean_ một cái gì đó. – matt

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn, nó giúp tôi hiểu những gì đang xảy ra. Tuy nhiên, 'cái nhìn nội dung' này mà bạn đang nói đến là gì? Chế độ xem vùng chứa? –

+0

Nó là một vanilla UIView đơn giản với mục đích là làm những gì tôi vừa mô tả - để hoạt động như một khung nhìn trung gian để 'contentSize' sẽ được thiết lập và các ràng buộc bên trong sẽ hoạt động. – matt

6

tôi đã có vấn đề tương tự, nhưng đã có thể để có được những UILabel để quấn một cách chính xác bằng cách thiết lập các hạn chế sau trên nhãn

  • Leading Space để SuperView
  • Trailing Space để SuperView
  • Equal Chiều rộng để giám sát ** (Đây là một trong đó hạn chế chiều rộng trên nhãn để nó sẽ bọc đúng cách)

Bạn cũng phải có khó khăn dẫn đầu từ đầu đến đáy om của chế độ xem cuộn. Ví dụ: nếu bạn chỉ có nhãn, bạn phải đặt Không gian trên cùng và Không gian dưới cùng để giám sát. Nếu không, nó sẽ có chiều cao nội dung có thể cuộn không rõ ràng.

Để ngăn cuộn ngang của chế độ xem cuộn, hãy kiểm tra "Hướng khóa đã bật" và gọi setContentOffset đúng cách bên trong phương thức scrollViewDidScroll (xem câu trả lời đầu tiên cho câu hỏi this để biết chi tiết).

1

Hãy thử sử dụng UILabel'spreferredMaxLayoutWidth và đặt thành chiều rộng của chế độ xem của cha mẹ.

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