Trong Visual Format Language (VFL), những hạn chế sẽ là:
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(-100)-[headerView(100)]" options:0 metrics:nil views:views]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[footerView(100)]-(-100)-|" options:0 metrics:nil views:views]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[headerView]|" options:0 metrics:nil views:views]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[footerView]|" options:0 metrics:nil views:views]];
Hoặc nếu bạn đang đi để thay thế @"V:[footerView(100)]-(-100)-|"
VFL với constraintWithItem
cuộc gọi, nó sẽ là:
[footerView addConstraint:[NSLayoutConstraint constraintWithItem:footerView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:100.0]];
[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:footerView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:scrollView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:100.0]];
tôi không thể nói lý do tại sao thực hiện Masonary của bạn không hoạt động, vì tôi không quen thuộc với nó. Nhưng tôi sẽ thử một trong những điều trên và chắc chắn.
Thành thật mà nói, bạn mô tả chiều cao của chế độ xem web và tôi tự hỏi liệu bạn có đặt giới hạn chiều cao của chế độ xem web hay không hoặc bạn chỉ điều chỉnh giá trị frame.size.height
(không tốt). Nhưng bạn chưa chia sẻ chi tiết về cách bạn đặt chiều cao của chế độ xem web, vì vậy tôi không thể nhận xét thêm.
Bất kể, nếu bạn có các vấn đề dựa trên ràng buộc, có hai kỹ thuật chẩn đoán hữu ích. Nếu nó vẫn không làm việc, tôi muốn chạy ứng dụng trên giả lập, tạm dừng nó, và sau đó tại (lldb)
nhắc nhập:
po [[UIWindow keyWindow] _autolayoutTrace]
Bạn sẽ thấy một cái gì đó như:
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
$0 = 0x0715d6e0
*<UIWindow:0x758aae0>
| *<UIView:0x71630f0>
| | *<UIScrollView:0x716a370>
| | | *<HeaderView:0x716b860>
| | | *<FooterView:0x716bbb0>
| | | *<UIWebView:0x716c2b0>
| | | | <_UIWebViewScrollView:0x7176a30>
| | | | | ...
| | | | | <UIWebBrowserView:0x797fe00>
| | | <UIImageView:0x75e1360>
| | | <UIImageView:0x75e2a60>
Hãy chắc chắn rằng bạn không có bất kỳ cảnh báo nào.Nếu mọi thứ đều ok đó, sau đó tôi sau đó muốn sử dụng lệnh sau tại dấu nhắc (lldb)
:
po [[UIWindow keyWindow] recursiveDescription]
Bạn sẽ thấy một cái gì đó như:
(lldb) po [[UIWindow keyWindow] recursiveDescription]
$1 = 0x071c0ea0 <UIWindow: 0x758aae0; frame = (0 0; 320 568); autoresize = W+H; layer = <UIWindowLayer: 0x758b770>>
| <UIView: 0x71630f0; frame = (0 20; 320 548); autoresize = RM+BM; layer = <CALayer: 0x7163180>>
| | <UIScrollView: 0x716a370; frame = (0 0; 320 548); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x716b1d0>; layer = <CALayer: 0x716ad20>; contentOffset: {0, 16}>
| | | <HeaderView: 0x716b860; frame = (0 -100; 320 100); layer = <CALayer: 0x716b910>>
| | | <FooterView: 0x716bbb0; frame = (0 564; 320 100); layer = <CALayer: 0x716bee0>>
| | | <UIWebView: 0x716c2b0; frame = (0 8; 320 548); layer = <CALayer: 0x716c360>>
| | | | <_UIWebViewScrollView: 0x7176a30; frame = (0 0; 320 548); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0x7177000>; layer = <CALayer: 0x7176c80>; contentOffset: {0, 0}>
| | | | | ...
| | | | | <UIWebBrowserView: 0x797fe00; frame = (0 0; 1024 1754); gestureRecognizers = <NSArray: 0x7173260>; layer = <UIWebLayer: 0x716d7f0>>
| | | | | | ...
| | | <UIImageView: 0x75e1360; frame = (1 540; 318 7); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x75e2980>>
| | | <UIImageView: 0x75e2a60; frame = (312 32.5; 7 530.5); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x75e2b00>>
Hãy nhìn vào kết quả khác nhau của bạn frame
giá trị và xem chuyện gì đang xảy ra. Điều đó có thể giúp bạn chẩn đoán giải pháp. Bạn không cung cấp đủ thông tin để chúng tôi chẩn đoán vấn đề (bạn cho chúng tôi biết chân trang không hoạt động, nhưng bạn không cho chúng tôi biết nơi mà các ràng buộc của bạn đã kết thúc việc đặt nó). Nếu bạn thực hiện các lệnh trên, bạn có thể xác định chính xác nơi ràng buộc của bạn đã kết thúc đặt chân trang của bạn, và sau đó tìm ra cách khắc phục vấn đề từ đó.
Lưu ý, bạn sẽ thấy rằng headerView
và footerView
của tôi được hiển thị trong hai danh sách này đều là HeaderView
và FooterView
lớp thay vì UIView
. Khi chẩn đoán các vấn đề ràng buộc, sẽ hữu ích nếu các khung nhìn chính có lớp riêng của chúng, vì vậy tôi đã xác định UIView
các lớp con không thực hiện, nhưng nếu tôi sử dụng các lớp con duy nhất đó cho chế độ xem đầu trang và chân trang của mình, nó sẽ dễ dàng hơn để diễn giải kết quả của ở trên (lldb)
lệnh.
@interface HeaderView : UIView
@end
@implementation HeaderView
@end
@interface FooterView : UIView
@end
@implementation FooterView
@end
Cảm ơn câu trả lời của bạn, tôi đã quản lý để thiết lập ngay bây giờ. Cảm ơn rất nhiều cho các lệnh gỡ lỗi, chúng thực sự hữu ích. – fabian789