Cocoa 调整子视图的大小并调整超级视图/窗口的大小

Cocoa 调整子视图的大小并调整超级视图/窗口的大小,cocoa,nsview,Cocoa,Nsview,我的窗口的结构如下:NSWindow->NSView->NSTabView->NSScrollView->NSTextView。如果我使用setFrameSize更改NSScrollView的大小:SuperView/窗口不会调整大小以适应较大或较小的NSScrollView。当我设置子视图的大小时,是否可以通过编程自动调整窗口等的大小,或者是否需要以某种方式计算所有UI组件的大小并调整窗口本身的大小?提前感谢您提供的任何帮助或指导 没有内置的方法可以做到这一点。你得自己计算尺寸。假设层次结构中

我的窗口的结构如下:NSWindow->NSView->NSTabView->NSScrollView->NSTextView。如果我使用setFrameSize更改NSScrollView的大小:SuperView/窗口不会调整大小以适应较大或较小的NSScrollView。当我设置子视图的大小时,是否可以通过编程自动调整窗口等的大小,或者是否需要以某种方式计算所有UI组件的大小并调整窗口本身的大小?提前感谢您提供的任何帮助或指导

没有内置的方法可以做到这一点。你得自己计算尺寸。假设层次结构中的所有视图都已正确设置为自动调整大小,则只需更改窗口的框架并让自动调整大小即可。使用以下方法在UIView上创建一个类别:

- (void) resizeSuperviewsToContain {
    UIView* view = self;
    while(view.superview) {
        CGFloat maxY = CGRectGetMaxY(view.frame);
        CGRect superViewFrame = view.superview.frame;
        if(superViewFrame.size.height < maxY) {
            superViewFrame.size.height = maxY;
            view.superview.frame = superViewFrame;
        }
        view = view.superview;
    }
}
-(void)调整SuperViews的大小以包含{
UIView*view=self;
while(view.superview){
CGFloat maxY=CGRectGetMaxY(view.frame);
CGRect superViewFrame=view.superview.frame;
if(superViewFrame.size.height<最大值){
superViewFrame.size.height=maxY;
view.superview.frame=superViewFrame;
}
view=view.superview;
}
}

谢谢你,约书亚。现在至少我可以停止搜索这些不存在的方法了。:)