我会将几个UILabel水平放置并以视图为中心。根据用户选择,将有3个,5个或7个标签。
我想在每种情况下保持标签居中。
示例:
L1 L2 L3
L1 L2 L3 L4 L5
L1 L2 L3 L4 L5 L6 L7
L1在每种情况下都是相同的,依此类推,只是根据需要显示或隐藏其他人。每一行代表一个独特的案例。
尝试对每个标签使用约束似乎是一项很重要的工作。有更好的方法吗???
答案 0 :(得分:1)
我建议使用约束。因此,您无需担心不同的屏幕尺寸和尺寸。横向/纵向。
您可以查看创建约束的可视格式。我发现它非常方便: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html
我经常做的是创建不同的约束集,并将每个集合放在一个单独的数组中。当我需要进行交换时,我只需删除整个集合并添加另一个集合。
基于您想要实现的目标。我认为您可以设置如下约束:
当您想要显示L1 L2 L3时,只需隐藏其余标签,并将L2的中心x与超视图对齐。同样,当您想要显示L1 L2 L3 L4 L5时,只需对齐L3的中心x并隐藏其余标签
更改约束后,可以调用-layoutIfNeeded()
立即更新约束(或将其放在动画块中以设置转换动画)。
答案 1 :(得分:0)
尝试iOS 9上提供的新UIStackView
答案 2 :(得分:0)
我经常这样做。假设您的标签已添加到视图中。
NSArray *labels;
UIView *yourBaseView;
CGRect baseFrame = yourBaseView.bounds;
CGFloat spacer = 10;
CGRect labelFrame;
labelFrame.origin = CGPointMake(baseFrame.origin.x + spacer, baseFrame.origin.y);
labelFrame.size = CGSizeMake((baseFrame.size.width - (labels.count * spacer) - (spacer * 2)) / labels.count, baseFrame.size.height);
for (int i = 0; i < labels.count;++i){
UILabel *label = labels[i];
label.frame = labelFrame;
labelFrame.origin.x += labelFrame.size.width + spacer;
}