如何使用Cocoa Autolayout基于优先级调整两个子视图的大小?

如何使用Cocoa Autolayout基于优先级调整两个子视图的大小?,第1张

概述我在 Cocoa玩Autolayout,有些事情对我来说并不清楚. 我在一个窗口上有2个视图.每个视图的宽度是父窗口的1/2宽度. | | || | || View1 | View2 || | || | | 如果我调 我在 Cocoa玩autolayout,有些事情对我来说并不清楚.

我在一个窗口上有2个视图.每个视图的宽度是父窗口的1/2宽度.

|           |           ||           |           ||   VIEw1   |   VIEw2   ||           |           ||           |           |@H_404_14@  

如果我调整窗口大小,我希望VIEw2首先调整大小.

|           |     ||           |     ||   VIEw1   |VIEw2||           |     ||           |     |@H_404_14@  

当VIEw2达到其最小尺寸时,我希望将VIEw1调整为其最小尺寸.

|     |     ||     |     ||VIEw1|VIEw2||     |     ||     |     |@H_404_14@  

我怎样才能做到这一点?

解决方法 布局似乎有点不明确. vIEw2什么时候开始缩小而不是匹配vIEw1的大小?我假设视图应该是相同的大小,直到vIEw1达到软最小值.此时,vIEw2会调整大小,直到达到最小值,然后vIEw1会调整大小,直到达到最小值.

我们可以通过向约束添加优先级来实现此行为.按重要性排序,我们有:

> vIEw1和vIEw2> =最小值
> vIEw1> = vIEw1SoftMinimum
> vIEw1 == vIEw2

Contraint 1必须高于窗口大小调整优先级.我们可以使它成为必需的(这是默认值).

约束2必须高于约束3,但低于NSLayoutPriorityDragThatCannotResizeWindow.我们将成为480.

Contraint 3必须低于束缚2,所以我们将其设为479.

我们可以在一个可视化格式字符串中表达所有这些约束,您可以添加它

|[vIEw1(>=vIEw1Minimum,>=vIEw1SoftMinimum@480,==vIEw2@479)][vIEw2(>=vIEw2Minimum)]|@H_404_14@  

这是我测试过的代码:

NSVIEw *vIEw1 = [[NSTextVIEw alloc] initWithFrame:NSZeroRect];NSVIEw *vIEw2 = [[NSTextVIEw alloc] initWithFrame:NSZeroRect];[vIEw1 setTranslatesautoresizingMaskIntoConstraints:NO];[vIEw2 setTranslatesautoresizingMaskIntoConstraints:NO];NSVIEw *contentVIEw = [self.window contentVIEw];[contentVIEw addSubvIEw:vIEw1];[contentVIEw addSubvIEw:vIEw2];NSDictionary *vIEwsDictionary = NSDictionaryOfVariableBindings(vIEw1,vIEw2);[contentVIEw addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[vIEw1]|" options:NSLayoutConstraintOrIEntationVertical metrics:NulL vIEws:vIEwsDictionary]];[contentVIEw addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[vIEw2]|" options:NSLayoutConstraintOrIEntationVertical metrics:NulL vIEws:vIEwsDictionary]];NSDictionary *metrics = [NSDictionary dictionaryWithObjectsAndKeys:                         [NSNumber numberWithfloat:300],@"vIEw1SoftMinimum",[NSNumber numberWithfloat:150],@"vIEw1Minimum",@"vIEw2Minimum",nil];[contentVIEw addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[vIEw1(>=vIEw1Minimum,==vIEw2@479)]-[vIEw2(>=vIEw2Minimum)]|" options:0 metrics:metrics vIEws:vIEwsDictionary]];@H_404_14@                            	          总结       

以上是内存溢出为你收集整理的如何使用Cocoa Autolayout基于优先级调整两个子视图的大小?全部内容,希望文章能够帮你解决如何使用Cocoa Autolayout基于优先级调整两个子视图的大小?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存