在两个其他视图之间插入视图

时间:2015-01-05 10:46:32

标签: ios objective-c

我正在为IOS目标c编程很长一段时间,而且在这样的情况下,每次我执行一个简单的UI操作时,我开始计算距离感觉很疯狂:

说我有一个带有几个标签的页面:

NAME : MATAN
MUSIC : TECHNO
AGE : 26

现在在某些特定情况下,我想在“MUSIC”和“AGE”之间再插入一个标签。

通常我会检查新标签的高度,然后按代码移动“AGE”标签。

这是疯狂的,我没有找到比这更好的方法,因为在处理更复杂的视图时,这变得很难!

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

我建议你把它全部放在一个UITableView中,它专门用于这种东西,并具有插入/删除单元格的机制..

答案 1 :(得分:1)

UITableView用于此用途是一种过度杀伤,因为必须添加样板代码。更好的解决方案是使用两个重叠的容器视图控制器,每个控制器包含所需标签的正确固定布局。您可以分别以编程方式启用和禁用这两个容器。有关示例,请参阅下面的Apple指南:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

答案 2 :(得分:0)

你总是可以使用tableViews来使它更容易。

如果没有,那么请阅读有关约束的内容。也许你已经知道了。但是,如果你能正确地做到这一点,它们将是一个很大的帮助。

Read more about constraints here

答案 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];

});