我遇到的问题让我浪费了很多时间。每次我在View Controller
上插入一个元素(例如UITextField
,UIButton
等)并且我已经为View Controller
上的其他元素设置了约束我必须删除所有约束并添加新约束因为新元素破坏了元素屏幕位置的结构(它也修改了所有约束)。
每次我必须在Swift
应用程序的屏幕上更改内容时,我会花很多时间,因为每次修改内容时我都要再次添加所有约束。
有没有一种方法可以插入一个忽略其余元素的元素,然后根据屏幕上的一个或多个元素定位这个新元素?或者要做什么,在我正确设置之前,约束会忽略新元素?或者一些类似的解决方法?
P.S:根据评论,由于我的问题似乎不太清楚,我将添加一些额外的信息:
Main.storyboard
文件插入新元素。View Controller
。XCode
。提前致谢!
答案 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)
以这种方式继续浏览视图中的所有元素。