gpt4 book ai didi

macos - 在 OSX 10.8 中,如何限制 subview 与其父 View 大小相同

转载 作者:行者123 更新时间:2023-12-03 16:05:13 25 4
gpt4 key购买 nike

我在一个具有单个 NSView 的新应用程序中创建了默认的 NSWindow。然后我创建一个新的 NSViewController,它有自己的 XIB 和一个 View 。在应用程序委托(delegate)中,我做了显而易见的事情

self.mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[self.window.contentView addSubview:self.mainViewController.view];
self.mainViewController.view.frame = ((NSView*)self.window.contentView).bounds;

好的,如何以新的方式设置约束以使 subview 保持其大小与窗口相同,即它是 super View 。它似乎不会自动工作。 Autoresizessubviews 对于两个 View 都为 ON。

最佳答案

基本上,您需要限制四件事:

  1. subview 与其父 View 的前导空格为零
  2. subview 与其父 View 的顶部空间为零
  3. subview 的宽度等于其父 View 的宽度
  4. subview 的高度等于其父 View 的宽度

如果视觉约束不适合您,您可以在代码中单独构建这四个约束。使用方法+constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:
constant:
指定不同 View 属性之间的确切关系。例如,上面的约束 #1 可以表示为:

[NSLayoutConstraint constraintWithItem:mySubview
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:mySuperview
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.0f]

#3 可能是:

[NSLayoutConstraint constraintWithItem:mySubview
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:mySuperview
attribute:NSLayoutAttributeWidth
multiplier:1.0f
constant:0.0f]

一旦建立了这四个约束,您就可以根据需要将它们添加到您的 super View 中。

请注意,有多种方法可以实现与上述相同的效果:

  • 您可以限制尾随空格底部空格,而不是宽度和高度
  • 您可以限制center Xcenter Y而不是前导和顶部空格

您也可能在视觉表示中提出相同的约束,如 Peter Hosey 的回答所示。例如,等宽约束可能类似于 @"[mySubview(==mySuperview)]" 以及适当的 View 字典。

请记住 Auto Layout Guide是有关约束的大量信息,包括出现问题时如何调试它们。

关于macos - 在 OSX 10.8 中,如何限制 subview 与其父 View 大小相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com