子视图内子视图的自动布局(NSView)
Auto layout on subview inside subview (NSView)
我很难尝试为另一个子视图中的子视图正确设置自动布局。
我正在使用一个示例,其中两个工具栏项显示两个不同的子视图(按预期工作),并且这两个共享第三个子视图,该子视图不太适合。
添加子视图的代码很简单:
[subView removeFromSuperview];
[itemXSubView addSubview:subView];
[self.window setContentView:itemXView];
首先,我删除了第三个共享子视图 (subView),以防它已被添加,然后将其添加到 item[1-2]SubView 并使用子视图 item[1-2]View、[1-2] 设置 window 的内容,具体取决于所选的工具栏按钮。其他一切都是在自动布局条件下完成的。
结果是第三个共享子视图总是错位and/or剪切,如下例所示。调整 window 的大小并从第一个或第二个视图更改通常会加剧问题。
Example of third subview items cut
测试更新
试图委托主要 window 并覆盖两个调整大小函数(根据 @the4kman 的建议),但它们从未被调用过。 init 是唯一被调用的:
@interface viewController: NSView <NSWindowDelegate>
@end
@implementation viewController
-(id)init
{
if((self=[super init])) { }
return self;
}
- (void)resizeSubviewsWithOldSize:(NSSize)oldSize;
{
[super resizeSubviewsWithOldSize:oldSize];
}
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize;
{
[super resizeWithOldSuperviewSize:oldSize];
}
- (void)layout
{
[super layout];
}
另一个建议被调用,但遗憾的是没有实际改进。将 window 委托给 viewController
并将主视图 (self.view) 设置为嵌套的子视图。还尝试结合 [itemXSubView setNeedsLayout:true]
;:
@interface viewController: NSViewController <NSWindowDelegate>
@end
@implementation viewController
-(void)viewWillLayout
{
[super viewDidLayout];
[self.view setNeedsLayout:true];
}
@end
提前致谢!
itemXSubView
调整其子视图的大小但不适合它们。您必须在 addSubview
.
之前将 subView
放入 item1SubView
- (IBAction)item1Action:(id)sender {
NSLog(@"Item 1 action triggered");
[subView removeFromSuperview];
subView.frame = item1SubView.bounds;
[item1SubView addSubview:subView];
[self.window setContentView:item1View];
}
我很难尝试为另一个子视图中的子视图正确设置自动布局。
我正在使用一个示例,其中两个工具栏项显示两个不同的子视图(按预期工作),并且这两个共享第三个子视图,该子视图不太适合。
添加子视图的代码很简单:
[subView removeFromSuperview];
[itemXSubView addSubview:subView];
[self.window setContentView:itemXView];
首先,我删除了第三个共享子视图 (subView),以防它已被添加,然后将其添加到 item[1-2]SubView 并使用子视图 item[1-2]View、[1-2] 设置 window 的内容,具体取决于所选的工具栏按钮。其他一切都是在自动布局条件下完成的。
结果是第三个共享子视图总是错位and/or剪切,如下例所示。调整 window 的大小并从第一个或第二个视图更改通常会加剧问题。
Example of third subview items cut
测试更新
试图委托主要 window 并覆盖两个调整大小函数(根据 @the4kman 的建议),但它们从未被调用过。 init 是唯一被调用的:
@interface viewController: NSView <NSWindowDelegate>
@end
@implementation viewController
-(id)init
{
if((self=[super init])) { }
return self;
}
- (void)resizeSubviewsWithOldSize:(NSSize)oldSize;
{
[super resizeSubviewsWithOldSize:oldSize];
}
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize;
{
[super resizeWithOldSuperviewSize:oldSize];
}
- (void)layout
{
[super layout];
}
另一个建议被调用,但遗憾的是没有实际改进。将 window 委托给 viewController
并将主视图 (self.view) 设置为嵌套的子视图。还尝试结合 [itemXSubView setNeedsLayout:true]
;:
@interface viewController: NSViewController <NSWindowDelegate>
@end
@implementation viewController
-(void)viewWillLayout
{
[super viewDidLayout];
[self.view setNeedsLayout:true];
}
@end
提前致谢!
itemXSubView
调整其子视图的大小但不适合它们。您必须在 addSubview
.
subView
放入 item1SubView
- (IBAction)item1Action:(id)sender {
NSLog(@"Item 1 action triggered");
[subView removeFromSuperview];
subView.frame = item1SubView.bounds;
[item1SubView addSubview:subView];
[self.window setContentView:item1View];
}