OSX 随着 Window 变小,Autolayout 无法重绘某些控件

OSX Autolayout Fails to Redraw Some Controls As Window Gets Smaller

我有一个使用自动布局的视图的 xib 文件。随着视图变大,位于 window 下边缘的 3 个按钮都按预期向下移动,与 window 下边缘保持恒定距离。但是随着 window 变小,三个按钮不会移动,最终消失,只有当 window 变大(即使是最小的数量)时,它们才会重新绘制。下面的动画 gif 显示了它的外观。 更新:这是更新的屏幕截图。请注意,随着 window 调整大小,不仅按钮而且分段控件都无法正确绘制。

约束是我一直关注的地方。例如,标记为 "Check All" 的按钮有 2 个与其垂直位置相关的约束。另外两个与前沿位置有关,我没有在此处包括它们。

评论者要求我提供有关约束的详细信息。第一张图片显示了 "Check All" 按钮的约束。 (另一个按钮具有类似的约束。)。 constraints都是优先级1000,和原来的post.

略有不同

下一张屏幕截图显示了“全部选中”按钮上方 table 的约束条件。

我在应用委托上有这段代码:

- (void) windowDidResize: (NSNotification *) notification
{
    _masterViewController.view.frame = ((NSView*)_window.contentView).bounds;
}

如果我明确地向此方法添加代码以重绘未正确绘制的按钮和分段控件,一切看起来都很棒。这解决了这个问题,但它仍然没有解释为什么会发生这种情况。 更新:它告诉我这可能不是我最初怀疑的自动布局问题,而是与重绘周期有关。

有没有人知道为什么会这样?

尝试为这 2(check/uncheck) 个按钮添加对齐中心到 Y。将其设置为传输按钮,该按钮也将底部 space 设置为超级视图。

基本上 check/uncheck 按钮应该只有高度和宽度约束加上设置为传输按钮的 Y 约束对齐中心。选中和取消选中按钮之间也应该有一个约束(前导 space 一个)

希望对您有所帮助。

在您的代码中,无论您在哪里执行与 [_window.contentView addSubview:_masterViewController.view] 等效的操作,您都应该执行以下操作:

[_window.contentView addSubview:_masterViewController.view];
_masterViewController.view.translatesAutoresizingMaskIntoConstraints = NO; // optional if you already turned it off in the NIB
NSDictionary* views = @{ @"view": _masterViewController.view };
NSArray* constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|"
                                                               options:0
                                                               metrics:nil
                                                                 views:views];
[_window.contentView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|"
                                                      options:0
                                                      metrics:nil
                                                        views:views];
[_window.contentView addConstraints:constraints];

这些约束将 _masterViewController.view 填充 window 的内容视图。