我正在为IOS目标c编程很长一段时间,而且在这样的情况下,每次我执行一个简单的UI操作时,我开始计算距离感觉很疯狂:
说我有一个带有几个标签的页面:
NAME : MATAN
MUSIC : TECHNO
AGE : 26
现在在某些特定情况下,我想在“MUSIC”和“AGE”之间再插入一个标签。
通常我会检查新标签的高度,然后按代码移动“AGE”标签。
这是疯狂的,我没有找到比这更好的方法,因为在处理更复杂的视图时,这变得很难!
有什么建议吗?
答案 0 :(得分:2)
我建议你把它全部放在一个UITableView中,它专门用于这种东西,并具有插入/删除单元格的机制..
答案 1 :(得分:1)
UITableView用于此用途是一种过度杀伤,因为必须添加样板代码。更好的解决方案是使用两个重叠的容器视图控制器,每个控制器包含所需标签的正确固定布局。您可以分别以编程方式启用和禁用这两个容器。有关示例,请参阅下面的Apple指南:
答案 2 :(得分:0)
你总是可以使用tableViews来使它更容易。
如果没有,那么请阅读有关约束的内容。也许你已经知道了。但是,如果你能正确地做到这一点,它们将是一个很大的帮助。
答案 3 :(得分:0)
Somone提到使用约束。这应该让你指出正确的方向
self.automaticallyAdjustsScrollViewInsets = NO;
UILabel *label1 = [[UILabel alloc] init];
UILabel *label2 = [[UILabel alloc] init];
label1.text = @"NAME : MATAN";
label2.text = @"AGE : 26";
[self.view addSubview:label1];
[self.view addSubview:label2];
[label1 setTranslatesAutoresizingMaskIntoConstraints: NO];
[label2 setTranslatesAutoresizingMaskIntoConstraints: NO];
NSDictionary * viewsDictionary = NSDictionaryOfVariableBindings(label1, label2);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label1]-20-|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label2]-20-|" options:0 metrics: 0 views:viewsDictionary]];
NSArray * vertConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[label1]-10-[label2]" options:0 metrics: 0 views:viewsDictionary];
[self.view addConstraints:vertConstraint];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
UILabel *label3 = [[UILabel alloc] init];
label3.text = @"MUSIC : TECHNO";
[label3 setTranslatesAutoresizingMaskIntoConstraints: NO];
[self.view addSubview:label3];
NSDictionary * viewsDictionary = NSDictionaryOfVariableBindings(label1, label2, label3);
[self.view removeConstraints:vertConstraint];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label3]|" options:0 metrics: 0 views:viewsDictionary]];
NSArray * newVertConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[label1]-10-[label3]-10-[label2]" options:0 metrics: 0 views:viewsDictionary];
[self.view addConstraints:newVertConstraint];
});