WebView不会对resizeSubviewsWithOldSize中的帧大小更改做出反应

时间:2013-08-08 15:32:40

标签: objective-c cocoa webview nsview

我有一个包含WebView的自定义视图。我的自定义视图在resizeWithOldSuperviewSize:中执行自己的布局,然后调用resizeSubviewsWithOldSize:来调整其子视图的大小。

我的自定义视图包含WebView,NSTextField和另一个自定义视图。 NSTextField和自定义视图对窗口大小的变化反应非常好,但我的WebView只是以原始大小坐在那里。

编辑:请注意,WebView的位置按预期更改,但大小不会。

- (void)resizeSubviewsWithOldSize:(NSSize)oldSize
    {
    NSRect superBounds = self.superview.bounds;

    // ... set frames on other subviews; works fine ...

    // Move the WebView
    NSRect oldFrame = webView.frame;
    [self setNeedsDisplayInRect:oldFrame];
    NSRect newFrame = NSMakeRect(superBounds.origin.x, 55.0, superBounds.size.width, superBounds.size.height - 55.0);
    [webView setFrame:newFrame];

    // This doesn't work:
    // [[[[webView mainFrame] frameView] documentView] setNeedsDisplay:YES];

    // Neither does this:
    // [webView setNeedsDisplayInRect:newFrame];
    }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我可能已经解决了这个问题。关闭Interface Builder中的“自动布局”功能。我从未成为IB中任何自动布局功能的粉丝;我更喜欢在代码中进行自己的布局(更容易存档,查找,更改,复制等)。我已经在iOS上工作了一段时间,之前没有遇到过Auto Layout。

因此,在问题中引用的代码末尾没有任何注释掉的行是必要的 - 只需设置框架。