如何UITableViewCell在表格视图中使用s 内的自动布局,让每个单元格的内容和子视图确定行高(本身/自动),同时保持平滑的滚动性能?
我有一个自定义视图,layoutSubview在动画期间没有收到消息.
我有一个填充屏幕的视图.如果我更改导航栏的高度,它在屏幕底部有一个自定义子视图,可以在Interface Builder中正确调整大小.layoutSubviews在创建视图时调用,但从不再调用.我的子视图已正确布局.如果我关闭通话中状态栏,layoutSubviews则根本不会调用子视图,即使主视图确实为其调整大小设置了动画.
在什么情况下layoutSubviews实际上被称为?
我已经autoresizesSubviews设置NO为我的自定义视图.在Interface Builder中,我有顶部和底部支柱以及垂直箭头设置.
从这个答案:
这是接受的答案建议为视图更改设置动画:
_addBannerDistanceFromBottomConstraint.constant = 0
UIView.animate(withDuration: 5) {
self.view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
layoutIfNeeded当我们不更改帧时,为什么要打电话.我们正在改变约束,所以(根据这个其他答案)我们不应该调用setNeedsUpdateConstraints吗?
同样,这个备受好评的答案说:
如果稍后发生某些变化会使您的某个约束无效,则应立即删除约束并调用setNeedsUpdateConstraints
我确实尝试过使用它们.使用setNeedsLayout我的视图在左侧正确设置动画
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func animate(_ sender: UIButton) {
UIView.animate(withDuration: 1.8, animations: {
self.centerXConstraint.isActive = !self.centerXConstraint.isActive
self.view.setNeedsLayout()
self.view.layoutIfNeeded()
})
}
@IBOutlet weak var centerYConstraint: NSLayoutConstraint!
@IBOutlet var centerXConstraint: NSLayoutConstraint!
}
Run Code Online (Sandbox Code Playgroud)
但是使用setNeedsUpdateConstraints 不动画,它只是将视图快速向左移动.
import UIKit
class ViewController: UIViewController …Run Code Online (Sandbox Code Playgroud) 当使用自动布局时,我的理解是删除子视图(当然保留对它的引用),删除的子视图仍然知道它的自动布局约束.
但是,当稍后将其添加回超级视图时,子视图不再知道其帧大小.相反,它似乎得到零帧.
我假设autolayout会自动调整大小以满足约束条件.那不是这样吗?我认为自动布局意味着不要弄乱框架.添加子视图时是否仍需要设置初始帧rect,即使使用自动布局?
autolayout ×4
ios ×3
animation ×1
bounds ×1
cocoa ×1
cocoa-touch ×1
nsautolayout ×1
row-height ×1
subview ×1
swift ×1
uitableview ×1