gpt4 book ai didi

objective-c - 以编程方式使用自动布局对齐 NSView

转载 作者:行者123 更新时间:2023-12-03 17:39:30 25 4
gpt4 key购买 nike

我在以编程方式使用自动布局将 NSView 彼此相邻对齐时遇到问题。为了说明这一点,我做了一个非常简单的示例项目。 DiscView是NSView的子类,它用指定的颜色绘制圆盘。

在下面的示例中,我仅在两个 subview 之一上添加自动布局约束,结果正如我所预期的那样(请参见下面的屏幕截图)。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
DiscView *discViewA = [[DiscView alloc] init];
DiscView *discViewB = [[DiscView alloc] init];

discViewA.color = [NSColor blackColor];
discViewB.color = [NSColor redColor];

discViewA.translatesAutoresizingMaskIntoConstraints = NO;
discViewB.translatesAutoresizingMaskIntoConstraints = NO;

[self.customView addSubview:discViewA];
[self.customView addSubview:discViewB];

NSDictionary *discViewDictionary = @{@"discViewA" : discViewA,
@"discViewB" : discViewB};

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[discViewA]|" options:0
metrics:nil
views:discViewDictionary]];

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[discViewA]|" options:0
metrics:nil
views:discViewDictionary]];
}

enter image description here

但是,如果我尝试使用一些附加约束并排显示两个 subview ,我只会看到一个红色圆盘。也就是说,就好像红色圆盘直接绘制在黑色圆盘之上。

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[discViewA]-[discViewB]|" options:0
metrics:nil
views:discViewDictionary]];

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[discViewA]|" options:0
metrics:nil
views:discViewDictionary]];

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[discViewB]|" options:0
metrics:nil
views:discViewDictionary]];

enter image description here

这里可能出了什么问题?

最佳答案

[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[discViewA][discViewB]|" 
options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom
views:discViewDictionary]];


[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[discViewA]|" options:0
metrics:nil
views:discViewDictionary]];

试试这个。这可能有帮助。如果没有,就按照别人的建议去做,并像这样施加限制。

[self.customView addConstraint:[NSLayoutConstraint constraintWithItem:discViewA
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.customView
attribute:NSLayoutAttributeWidth
multiplier:0.5f
constant:0.f]];

关于objective-c - 以编程方式使用自动布局对齐 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071090/

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