我通常使用NSLayoutAnchor,但是很多次我都被建议不要使用它。除了更复杂/更长的代码之外,它是否存在性能下降等问题?
有人告诉我要用:
let myView = UIView(frame: CGRect(x: 0, y: 20, width: view.frame.bounds.width, height: 100))而不是:
let myView = UIView()
myView.translatesAutoresizingMaskIntoConstraints = false
myView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
myView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
myView.heightAnchor.constraint(equalToConstant: 100).isActive = true发布于 2018-09-11 03:03:04
使用框架的缺点是,一旦列出了框架,就需要在需要时手动更改它们。例如:方向改变,动画等等。但是如果你使用自动取景,你就会相对地定义视图的位置,这意味着,即使是在改变方向或动画的情况下,你的视图也会根据你设置的约束来调整自己的大小。
关于性能下降,自动收费表需要更多的时间(不是那么多)来计算视图的帧,但是这可以忽略不计,而且方便的方式掩盖了性能的影响。
最后,考虑到大多数视图都需要基于屏幕大小、方向变化等的动态定位,框架的用例将非常小。混合帧和自动输出绝不是一个好主意。
Tl;dr - Autolayout >帧。
发布于 2018-09-11 04:10:37
如果您担心复杂/冗长的代码,请尝试SnapKit。它让你爱上了自己的https://github.com/SnapKit/SnapKit
尽管如此,很多人倾向于认为AutoLayout和框架。但在现实中,你应该两者兼用。如果您的视图不会改变,并且需要快速交互,请使用框架。如果您希望您的视图具有可伸缩性并处理景观/纵向,请使用AutoLayout。
https://stackoverflow.com/questions/52268035
复制相似问题