在其他两个视图之间插入视图
Inserting view between two other views
我已经为 IOS objective c 编程了很长时间了,但在这样的情况下,每次我执行一个简单的程序时就开始计算距离对我来说感觉很疯狂UI 如此操作:
假设我有一个带有几个标签的页面:
NAME : MATAN
MUSIC : TECHNO
AGE : 26
现在在一些特定的情况下,我想在"MUSIC"和"AGE"之间再插入一个标签。
通常我会检查新标签的高度,然后将 "AGE" 标签按代码向下移动。
太疯狂了,我还没有找到比这更好的方法,因为在处理更复杂的视图时,这变得很难!
有什么建议吗?
我建议您将它们全部放在 UITableView 中,它专为此类内容而设计,并且具有 insert/remove 个单元格的机制..
您始终可以使用 tableView 来简化操作。
如果没有,请阅读有关约束的内容。也许你已经知道了。但如果你能正确地做到这一点,他们会提供很大的帮助。
有人提到使用约束。这应该让你为那种事情指明正确的方向
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];
});
鉴于您必须添加的样板代码数量,用于此用途的 UITableView 有点矫枉过正。更好的解决方案是使用两个重叠的容器视图控制器,每个都包含所需标签的正确固定布局。您可以通过编程方式分别启用和禁用这两个容器。有关示例,请参阅下面的 Apple 指南:
我已经为 IOS objective c 编程了很长时间了,但在这样的情况下,每次我执行一个简单的程序时就开始计算距离对我来说感觉很疯狂UI 如此操作:
假设我有一个带有几个标签的页面:
NAME : MATAN
MUSIC : TECHNO
AGE : 26
现在在一些特定的情况下,我想在"MUSIC"和"AGE"之间再插入一个标签。
通常我会检查新标签的高度,然后将 "AGE" 标签按代码向下移动。
太疯狂了,我还没有找到比这更好的方法,因为在处理更复杂的视图时,这变得很难!
有什么建议吗?
我建议您将它们全部放在 UITableView 中,它专为此类内容而设计,并且具有 insert/remove 个单元格的机制..
您始终可以使用 tableView 来简化操作。
如果没有,请阅读有关约束的内容。也许你已经知道了。但如果你能正确地做到这一点,他们会提供很大的帮助。
有人提到使用约束。这应该让你为那种事情指明正确的方向
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];
});
鉴于您必须添加的样板代码数量,用于此用途的 UITableView 有点矫枉过正。更好的解决方案是使用两个重叠的容器视图控制器,每个都包含所需标签的正确固定布局。您可以通过编程方式分别启用和禁用这两个容器。有关示例,请参阅下面的 Apple 指南: