ios – 使用自动布局在调整大小时平均更改空格

ios – 使用自动布局在调整大小时平均更改空格,第1张

概述如果我在我的应用中有一个包含3个子视图的视图(作为示例),它们之间有以下间距: TOP – 40分 – SUBVIEW 1 – 60分 – SUBVIEW 2 – 80分 – SUBVIEW 3 – 80分 – BOTTOM 我理解如何使用自动布局来确保每个子视图保持其高度和宽度,并且我可以在3.5或4英寸iPhone屏幕上对齐所有内容. 但我无法弄清楚我需要做出什么样的限制,以便如果它对齐3.5 如果我在我的应用中有一个包含3个子视图的视图(作为示例),它们之间有以下间距:

top – 40分 – SUBVIEW 1 – 60分 – SUBVIEW 2 – 80分 – SUBVIEW 3 – 80分 – BottOM

我理解如何使用自动布局来确保每个子视图保持其高度和宽度,并且我可以在3.5或4英寸iPhone屏幕上对齐所有内容.

但我无法弄清楚我需要做出什么样的限制,以便如果它对齐3.5英寸屏幕,然后进入4英寸屏幕,每个间距将按比例增加(例如40点将达到47,60至71,80至95 – 或其左右).

这可能吗?或者我是否需要使元素之间的所有间距相等? (如果是这样,我怎么还能让它同样调整大小?)

我是auto Layout的新手,所以如果我遗漏了任何东西,或者还没弄清楚我的意思,请告诉我,谢谢.

解决方法 我不知道有什么简单的方法可以做到这一点.我做了一个所有空间相同的地方,但为了做到这一点,我不得不用不可见的标签填充空格(只是标签没有标题).所以,我把我的4个可见物体和5个“间隔物标签”放在一起.我使4个可见对象都具有明确的高度,并且没有固定高度的间隔物,但设置为完全相同:
-(voID)vIEwDIDLoad {    [super vIEwDIDLoad];    NSMutableDictionary *vIEwsDict = [NSMutableDictionary dictionary];    for (int i=1; i<5; i++) { // Labels with Titles        UILabel *b = [[UILabel alloc] initWithFrame:CGRectMake(0,150,44)];         b.text = @"This is my label";        [b setTranslatesautoresizingMaskIntoConstraints:NO];        [vIEwsDict setobject:b forKey:[Nsstring stringWithFormat:@"b%d",i]];    }    for (int i=1; i<6; i++) { // Spacer labels        UILabel *l = [[UILabel alloc ]init];        [l setTranslatesautoresizingMaskIntoConstraints:NO];        [vIEwsDict setobject:l forKey:[Nsstring stringWithFormat:@"l%d",i]];    }    for (ID obj in vIEwsDict.allKeys)         [self.vIEw addSubvIEw:vIEwsDict[obj]];    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[l1][b1][l2(==l1)][b2][l3(==l1)][b3][l4(==l1)][b4][l5(==l1)]|"                                                                   options:NSLayoutFormatAlignAllLeading                                                                   metrics:nil                                                                     vIEws:vIEwsDict];    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[b1]"                                                                   options:0                                                                   metrics:nil                                                                     vIEws:vIEwsDict];    [self.vIEw addConstraints:constraints];    [self.vIEw addConstraints:constraints2];}

为了使空间不同,我认为你必须使用较长形式的表达约束,而不是视觉格式.以下代码似乎对我有用.我使用与上面相同的视图定义,除了我将标题标签的数量减少到3,将间隔符减少到4以匹配您的问题.相对间距应与示例中的2:3:4:4相同.

NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.vIEw attribute:NSLayoutAttributetop relatedBy:0 toItem:vIEwsDict[@"l1"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l1"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"b1"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b1"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"l2"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l2"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"b2"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con5 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b2"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"l3"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con6 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l3"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"b3"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con7 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b3"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:vIEwsDict[@"l4"] attribute:NSLayoutAttributetop multiplIEr:1 constant:0];    NSLayoutConstraint *con8 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l4"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.vIEw attribute:NSLayoutAttributeBottom multiplIEr:1 constant:0];    NSLayoutConstraint *con9 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:vIEwsDict[@"l2"] attribute:NSLayoutAttributeHeight multiplIEr:.66 constant:0];    NSLayoutConstraint *con10 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:vIEwsDict[@"l3"] attribute:NSLayoutAttributeHeight multiplIEr:.5 constant:0];    NSLayoutConstraint *con11 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:vIEwsDict[@"l4"] attribute:NSLayoutAttributeHeight multiplIEr:.5 constant:0];    NSLayoutConstraint *con12 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b1"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.vIEw attribute:NSLayoutAttributeLeading multiplIEr:1 constant:100];    NSLayoutConstraint *con13 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b2"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.vIEw attribute:NSLayoutAttributeLeading multiplIEr:1 constant:100];    NSLayoutConstraint *con14 = [NSLayoutConstraint constraintWithItem:vIEwsDict[@"b3"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.vIEw attribute:NSLayoutAttributeLeading multiplIEr:1 constant:100];    NSArray *constraints = @[con1,con2,con3,con4,con5,con6,con7,con8,con9,con10,con11,con12,con13,con14];    [self.vIEw addConstraints:constraints];
总结

以上是内存溢出为你收集整理的ios – 使用自动布局在调整大小时平均更改空格全部内容,希望文章能够帮你解决ios – 使用自动布局在调整大小时平均更改空格所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存