In Visual Format Sprache (VFL), würden die Einschränkungen:
[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]];
Oder wenn Sie das @"V:[footerView(100)]-(-100)-|"
VFL mit constraintWithItem
Anrufe ersetzen würden, wäre es:
[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]];
I Ich kann nicht sagen, warum Ihre Masonary-Implementierung nicht funktioniert, da ich mich nicht damit auskenne. Aber ich würde eines der oben genannten ausprobieren und dafür sorgen.
Ehrlich gesagt, beschreiben Sie die Einstellung der Höhe der Webansicht, und ich frage mich, ob Sie die Höhe Einschränkung der Webansicht (gut) oder ob Sie nur den Wert frame.size.height
(schlecht) eingestellt haben. Sie haben jedoch nicht die Details zur Einstellung der Höhe der Webansicht mitgeteilt, sodass ich keinen weiteren Kommentar abgeben kann.
Unabhängig davon, ob Sie einschränkungsbasierte Probleme haben, gibt es zwei nützliche Diagnosetechniken. Wenn es immer noch nicht funktioniert, würde ich die App auf dem Simulator laufen, Pause, und dann an der (lldb)
Aufforderung eingeben:
po [[UIWindow keyWindow] _autolayoutTrace]
sollten Sie sehen, so etwas wie:
(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>
Stellen Sie sicher, habe keine Warnungen dort.Wenn alles, was es in Ordnung aussieht, dann würde ich dann verwenden Sie den folgenden Befehl an der (lldb)
prompt:
po [[UIWindow keyWindow] recursiveDescription]
Sie so etwas wie sehen sollte:
(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>>
Werfen Sie einen Blick auf Ihre verschiedenen resultierenden frame
Werte und Schau, was vor sich geht. Das kann Ihnen helfen, die Lösung zu diagnostizieren. Sie liefern uns nicht genügend Informationen, um das Problem zu diagnostizieren (Sie sagen uns, dass die Fußzeile nicht funktioniert hat, aber Sie sagen uns nicht, wo Ihre Einschränkungen sie platziert haben). Wenn Sie die obigen Befehle ausführen, können Sie genau bestimmen, wo Ihre Einschränkung Ihre Fußzeile platziert hat, und dann herausfinden, wie Sie das Problem von dort beheben können.
Hinweis, werden Sie sehen, dass meine headerView
und footerView
sind in diesen beiden Auflistungen als HeaderView
und FooterView
Klassen statt UIView
zeigt sich. Bei der Diagnose von Abhängigkeitsproblemen ist es nützlich, wenn die Schlüsselsichten ihre eigene Klasse haben, also habe ich UIView
Unterklassen ohne Implementierung definiert, aber wenn ich diese eindeutigen Unterklassen für meine Kopf- und Fußzeilenansicht verwende, ist es viel einfacher, die Ergebnisse der zu interpretieren über (lldb)
Befehle.
@interface HeaderView : UIView
@end
@implementation HeaderView
@end
@interface FooterView : UIView
@end
@implementation FooterView
@end
Danke für Ihre Antwort, ich habe es jetzt eingerichtet. Vielen Dank für die Debugging-Befehle, sie sind wirklich nützlich. – fabian789