我有一个示例项目,我在其中创建了一个名为 WebView 的自定义 UIWebView 。它们被添加到 UIViewController 中的视图中。两个 WebView 在 viewDidLoad 中初始化并添加到数组列表中。第一个添加为子视图 self.view 。故事板包含一个UIBarButton,当点击它时,第二个 WebView 作为子视图添加到 self.view 。
- (void)viewDidLoad
{
[super viewDidLoad];
WebView *webView1 = [[WebView alloc] initWithFrame:self.view.bounds];
WebView *webView2 = [[WebView alloc] initWithFrame:self.view.bounds];
self.webViews = [NSArray arrayWithObjects: webView1, webView2, nil];
UIWebView *webView = [self.webViews objectAtIndex:0];
[self.view addSubview:webView];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.google.com/"]]];
}
以下是 WebView 的实现,其中工具栏添加到视图的底部(-50px):
@implementation WebView
- (void) initToolbar {
UIToolbar *toolbar = [UIToolbar new];
toolbar.barStyle = UIBarStyleBlackTranslucent;
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
[toolbar sizeToFit];
toolbar.frame = CGRectMake(0, self.frame.size.height-80, 320, 30);
[self addSubview:toolbar];
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self initToolbar];
}
return self;
}
@end
问题是,工具栏在两个视图中的位置不同(它们可以像第一个一样定位)。他们为什么不能平等对待?
您可以在此处下载小样本项目: http://uploads.demaweb.dk/UIWebView.zip
我的注意事项如上所述,两个 WebView 目前已在 viewDidLoad 中初始化。如果我等待并首先初始化然后我需要它们,它似乎按预期工作。
答案 0 :(得分:1)
这里的事情是self.frame.size.height
viewDidLoad
在通过按钮点击初始化时UIWebView
不一样。如果您在viewDidLoad
中直接添加UINavigationBar
,则UINavigationController
的{{1}}尚未加载,self.view
的框架被“感知”为({1}}不是真的,因为 )更大。
这解释了40.0(?)点的差异。
这种有问题的行为的一种可能解决方案是在UIWebView
方法中初始化并添加(至少第一个)viewWillAppear:animated
实例。 (UIViewController
已经实现了此方法)