我需要了解NSView如何自动化它的视图。我已经在IB中设置了所有内容,并且我的子视图调整得很好(当我用鼠标调整窗口大小时)。但是,如果我使用我的新帧rect [myMainView setFrame:]
,则没有任何反应。我的所有子视图仍然是原始大小(即使主视图具有正确的尺寸)。孩子的resizeWithOldSuperviewSize:
被调用,但它的大小仍然不合适。
屏幕上有一个屏幕上充满了可可元素(屏幕#1),标签,图像,视频。这些元素有一个明确定义的布局。我通过Interface Builder设置了自动调整行为,效果非常好。调整主窗口大小可以令人满意的方式调整元素的大小。
现在,用户点击“下一步”按钮,然后将绘制第二个屏幕元素(屏幕#2)。我的布局是基于规范的屏幕尺寸(例如,800x600)构建的。但是现在窗口更大(或更小),因为它在屏幕#1中调整了大小。因此,元素现在只占用窗口中的一小块区域,而不是适当地调整大小以填充可用空间。我想缩放这些元素。
我是否误解了自动调整的工作原理?如何手动触发NSView下的自动调整机制?
我可以做两件事:
答案 0 :(得分:20)
此代码
NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];
[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after resizing: %@", NSStringFromRect([subView frame]));
确实给出了预期的结果:
[...] subview's frame before resizing: {{0, 0}, {100, 100}} [...] subview's frame after resizing: {{0, 0}, {200, 100}}
你的问题在别的地方。我希望在调整大小时,您的一个容器视图不是窗口视图层次结构的一部分。
问题的一个很好的解决方案可能是使用没有标签的NSTabView,因为那时你的所有视图都在窗口中(可能是隐藏的),而tabview负责调整大小。
另一个解决方案是将多个视图放在一起,并使用setHidden:
只显示一个。
答案 1 :(得分:3)
原来我的方法是正确的。我将帧大小设置为不正确的值,因此我没有得到预期的行为。卫生署。