如何在UIWebView中定位UIToolbar

时间:2012-02-18 21:47:26

标签: objective-c cocoa-touch uiview uiviewcontroller

我有一个示例项目,我在其中创建了一个名为 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 中初始化。如果我等待并首先初始化然后我需要它们,它似乎按预期工作。

1 个答案:

答案 0 :(得分:1)

这里的事情是self.frame.size.height viewDidLoad在通过按钮点击初始化时UIWebView不一样。如果您在viewDidLoad中直接添加UINavigationBar,则UINavigationController的{​​{1}}尚未加载,self.view的框架被“感知”为({1}}不是真的,因为 )更大。

这解释了40.0(?)点的差异。

这种有问题的行为的一种可能解决方案是在UIWebView方法中初始化并添加(至少第一个)viewWillAppear:animated实例。 (UIViewController已经实现了此方法)