Tôi đang tạo chế độ xem iOS hiển thị các phần tử văn bản tĩnh khác nhau. Các xib trông như thế này:Khoảng cách dọc này đến từ đâu trong UILabelView?
Nó sử dụng bốn nhãn cho các tiêu đề, dấu thời gian, thân và chân. Mỗi chế độ xem được neo vào chế độ xem anh chị em ở trên nó theo chiều dọc và được neo sang trái/phải của chế độ xem gốc. Tất cả các nhãn đều có chiều cao cố định ngoại trừ phần thân có chiều cao> = và số dòng được đặt thành 0 bằng "bọc từ" làm kiểu gói dòng. Chế độ xem gốc là một UIScrollView.
Trên iPhone có vẻ như tốt:
Tuy nhiên trên iPad nó trông như thế này:
Huh? Đâu là tất cả không gian dọc phụ trong nhãn cơ thể đến từ đâu? Các xib và bộ điều khiển xem của nó là giống hệt nhau giữa iPhone và iPad (không có mã iPad tùy chỉnh tại thời điểm này). Tôi đã tìm thấy rằng không gian dọc có liên quan trực tiếp đến bao nhiêu dòng kết thúc tốt đẹp mà nhãn hiển thị. Nếu không có dòng bọc, không có thêm không gian dọc. Nếu chỉ có một vài dòng bọc, có thêm một chút không gian dọc. Nếu gần như tất cả các dòng kết thúc tốt đẹp, tốt, đó là những gì nó trông giống như.
Trước hết mọi ý tưởng về lý do khiến UILabel hoạt động theo cách này?
Thứ hai, nếu tôi không thể dừng việc này, tôi có thể làm việc như thế nào?
Tôi đã thử một vài điều. Nếu tôi gọi [bodyLabel sizeToFit] trong phạm vi -viewDidLayoutSubViews thì nó sẽ sửa nhãn nhưng không sửa bố cục của bất kỳ chế độ xem anh chị em nào (ví dụ: nhãn Chân trang bị kẹt ở cuối màn hình thay vì được kéo lên ngay dưới thân hình). Bất kỳ nỗ lực nào để có được toàn bộ khung nhìn để bố trí lại các con của nó sau khi gọi hàm sizeToFit bị bỏ qua. Tôi cũng đã thử kích thước UILabel bằng cách tính chiều cao dựa trên phông chữ, kết quả trong cùng một hành vi như -sizeToFit (mặc dù có nhiều mã hơn).
Thay thế nhãn UILabel bằng UITextView thay vì không cung cấp cho tôi các vấn đề giãn cách dọc kỳ lạ nhưng tôi cần tính chiều cao của UITextView theo cách thủ công (sử dụng tính toán phông chữ) và điều gì đó về việc thay đổi kích thước UITextView trong UIScrollView cha mẹ. vì vậy UIScrollView đơn giản từ chối di chuyển (như thể nó không biết nội dung của nó quá lớn đối với các giới hạn của nó).
Vì vậy, hiện tại tôi đang bị kẹt. Ngay cả chỉ là một lời giải thích của lý do tại sao UILabel hoạt động theo cách này trên bố cục iPad sẽ rất hữu ích.
Bạn đang sử dụng Autolayout hoặc Springs và Struts? – CoderPug
Tôi đang sử dụng Autolayout. Tôi có thể đăng các ràng buộc nếu bạn muốn. Tôi đã cố gắng giải thích các ràng buộc có liên quan trong đoạn đầu tiên. – Brandon
Hãy nhìn tôi rằng các vấn đề là những ràng buộc, nếu sử dụng '[bodyLabel sizeToFit]' kích hoạt footer bị kẹt ở phía dưới thì bạn cần kiểm tra các ràng buộc của mình, có lẽ một cái để đặt Footer ở phía dưới và những cái khác tạo ra nhãn Cơ thể của bạn để kéo theo chiều dọc. – CoderPug