繁体   English   中英

界面构建器中的NSLayoutConstraints用于UIview中的5个标签

[英]NSLayoutConstraints in interface builder for 5 labels in a UIview

我认为这些新限制对我来说是一个根本性的问题。

想象一下,您在UIView中放置了5个标签,这些标签从上到下都是。 顶部标签在视图顶部与其下方的下一个标签之间均等间隔。 然后,每个标签的间距也相等。

我想发生的是,当使UIView高度变小或变大时,每个标签之间的间距会平均变化吗?

我应该瞄准什么。 我应该使第3个标签在视图中垂直居中,然后从中心向其他标签添加约束,还是应该将1和2约束到视图顶部,将3和3和4和5约束到视图底部?

预先感谢您的所有建议。

编辑:添加下面的答案后,我已经解决了界面生成器中的约束,虽然我不是100%肯定我已经回答了它,但是我认为我已经解决了。

在所有标签之间,我有一定距离。 但是我也有一定的最小距离,例如跟随苹果的HIG,我认为标签之间的距离是15。 所以我的年龄是30岁,我设置的约束大于或等于15。现在,当超级视图更改时,iOS会为我完成从30到15的所有移动。

我最初是使用按钮来完成此操作的,而我要使其能够自动调整以适应视框大小(旋转时)的唯一方法是在每个按钮之间添加标签(没有文本,因此它们是不可见的),在包含视图与第一个和最后一个按钮之间。 所有按钮均具有固有尺寸,而标签则没有,因此可以随意更改其高度以填充空间。 我修改了代码以使用所有标签,其中“ b”标签是带有文本的标签。

-(void)viewDidLoad {
    [super viewDidLoad];

    NSMutableDictionary *viewsDict = [NSMutableDictionary dictionary];
    for (int i=1; i<5; i++) {
        UILabel *b = [[UILabel alloc] initWithFrame:CGRectMake(0, 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++) { // these are the 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];
} 

这将产生均匀间隔的标签,并在视图的左边缘保留标准空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM