如何在视图控制器上插入元素而不修改其余约束?

时间:2016-09-02 07:17:51

标签: ios swift

我遇到的问题让我浪费了很多时间。每次我在View Controller上插入一个元素(例如UITextFieldUIButton等)并且我已经为View Controller上的其他元素设置了约束我必须删除所有约束并添加新约束因为新元素破坏了元素屏幕位置的结构(它也修改了所有约束)。

每次我必须在Swift应用程序的屏幕上更改内容时,我会花很多时间,因为每次修改内容时我都要再次添加所有约束。

有没有一种方法可以插入一个忽略其余元素的元素,然后根据屏幕上的一个或多个元素定位这个新元素?或者要做什么,在我正确设置之前,约束会忽略新元素?或者一些类似的解决方法?

P.S:根据评论,由于我的问题似乎不太清楚,我将添加一些额外的信息:

  • 我正在尝试在设计应用程序时插入新元素。
  • 我正在使用Main.storyboard文件插入新元素。
  • 我将元素拖到View Controller
  • 我正在使用XCode

提前致谢!

2 个答案:

答案 0 :(得分:0)

您仍然可以让Xcode为您创建约束,它在大多数情况下都可以正常工作。只需在菜单中选择:

Editor > Resolve AutoLayout Issues > Reset to suggested constraints

完成此操作后,您仍然可以更改一些约束以满足您的需求。

通常,您会删除控制器中的所有视图,并仅在最后设置约束。

作为@Anand K mentioned,Stack视图是一种很好的布局应用程序的方式,而且受到Apple的强烈鼓励。

答案 1 :(得分:0)

您必须使用代码设置约束,以便为视图中的所有元素提供精确位置。这是一个例子:

1)对于名为 userNameLabel 的标签:

userNameLabel.leftAnchor.constraintEqualToAnchor(imageView.rightAnchor, constant: 10).active = true
                userNameLabel.topAnchor.constraintEqualToAnchor(self.topAnchor, constant: 50).active = true
                userNameLabel.widthAnchor.constraintEqualToConstant(220).active = true
                userNameLabel.heightAnchor.constraintEqualToConstant(30).active = true

2)另一个名为 albumNameLabel 的标签:

albumNameLabel.widthAnchor.constraintEqualToConstant(220).active = true
                albumNameLabel.heightAnchor.constraintEqualToConstant(30).active = true
                albumNameLabel.topAnchor.constraintEqualToAnchor(userNameLabel.bottomAnchor, constant: 5).active = true
                albumNameLabel.leftAnchor.constraintEqualToAnchor(imageView.leftAnchor, constant: 10).active = true
在你提出约束之前

3)记住

self.addSubview(userNameLabel)
self.addSubview(albumNameLabel)

以这种方式继续浏览视图中的所有元素。