- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我想了解 View 更新周期
我几乎能看懂一些东西,但有一些神秘的东西
我了解到动画 block 也会在更新周期触发
为了尝试理解动画 block 中的 layoutIfNeeded
,我编写了一些示例代码,如下所示
class MyView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
print("Layout Subviews")
}
}
class ViewController: UIViewController {
@IBOutlet weak var blueHeight: NSLayoutConstraint!
@IBAction func heightPressed(_ sender: AnyObject) {
if self.blueHeight.constant == 25.0 {
self.blueHeight.constant = self.view.bounds.height - 100.0
} else {
self.blueHeight.constant = 25.0
}
self.view.setNeedsLayout()
UIView.animate(withDuration: 2.0, animations: {
print("animation block")
self.view.layoutIfNeeded() // ----- **
}) { (_) in
print("animation ended")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
输出是这样的
"Layout Subviews"
"Layout Subviews" ---- because of initial settings
"Animation block"
"Layout Subviews"
"Animation ended"
但是当我将 layoutIfNeeded
更改为 setNeedsLayout
时,输出发生了变化
"Layout Subviews"
"Layout Subviews" ---- because of initial settings
"Animation block"
"Animation ended"
"Layout Subviews"
所以我理解动画 block 先执行然后 View 更新,所以动画 block 在更新周期中比 View 的更新具有更高的优先级
是吗?如果我错了,我想了解 View 的更新周期和动画 block 之间的关系
最佳答案
动画 block 内的内容,如果它是可动画的,则直到事务结束时的动画时间才会运行。
layoutIfNeeded
算作可动画。它在动画 block 中的作用是:它导致在代码中执行的帧等更改或通过 layoutSubviews
中的自动布局进行动画处理,而不是立即执行。
基本上,这是一种将下一个布局时刻包裹在动画中的方法。
关于ios - 关于iOS Constraint update Animation - Animation block + layoutIfNeeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51604295/
不太明白为什么layoutIfNeeded仍然没有返回布局的正确宽度...但是如果我通过调度获得宽度,它将返回正确的宽度。看来layoutIfNeeded 不会立即布局,而是异步的。如果我错了请纠正我
出现崩溃: navigationController.view.layoutIfNeeded() log : fatal error: unexpectedly found nil while unw
我有一个表格 View ,我使用此方法计算单元格高度 override func tableView(_ tableView: UITableView, heightForRowAt indexPat
所以,我有这样的代码 UIView.animate(withDuration: 2) { self.navigationController?.navigationBar.isHidden =
我有一个 UITextView,正在显示文本当文本不是很大时(我说的是 100-200 个单词),应用程序运行得很好 如果文本非常大(大约 10000 个单词),它就会不断崩溃 代码 func scr
我有一个按钮,可以根据某些情况改变大小。我不需要完成动画,因为用户永远看不到发生的变化。有时,当从较小尺寸切换回较大尺寸时,按钮会卡在较小尺寸上。我认为 layoutIfNeeded() 可以解决这个
我正在为 UITextField 的大小调整设置动画。我正在使用带有约束的自动布局。我的 Storyboard 中有 H:|-[textField] -(8)-[label]-(8)-[image]-
我正在使用此功能使用大量渐变绘图: func drawGradient(colors: [CGColor], locations: [NSNumber]) { let gradientLay
何时以及如何使用 layoutIfNeeded?我知道当我们更改 View 的布局时,我们可以调用 setNeedsLayout 来更新布局,但不确定何时应该使用 layoutIfNeeded。 注意
我正在 xib 文件中创建以下 View 。 有两个约束,我一次想要其中一个,所以我激活一个并停用另一个约束。 其中一个约束是 View (顶层 View )view.bottom == inputV
我正在尝试使用自动版式在屏幕上和屏幕外为我的 ADBannerView 制作动画。预自动布局(设置框架和动画)一切正常。现在我有以下代码,它在 viewDidLoad 上运行以确保广告横幅是否离开屏幕
我已经以编程方式构建了 View ,然后为它们设置了动画。有一个 View 动画链,最后一个是要设置动画的按钮。 当我通过调用 layoutIfNeeded() 更改约束(这些约束独立于其他约束并且没
我遇到了一个让我很困惑的问题。我写了一个简单的两张图片的动画,效果很好。但是突然间它停止了动画,我不明白为什么。我没有做任何我能想到的会影响动画的改变。我已经检查过 NSLayoutConstrain
UIView 我有两种状态: 我在它们之间使用 @IBaction 为 button 制作动画: @IBAction func tapped(sender: UIButton) { flag
一些 S.O.问题展示了一种自动布局技术,用于确定 View 满足其约束所需的最小尺寸:[header systemLayoutSizeFittingSize: UILayoutFittingComp
我这里有一个用于自定义 tableview 单元格的类,但在 awakeFromNib 中,self.frame 始终为 0,0,0,0。我尝试调用 [self layoutIfNeeded] 但这没
layoutIfNeeded 在 iPad 上无法正常工作,但在 iPhone 上可以正常工作。我想要一个圆形按钮。在 iPhone 上圆圈生成正确,但在 iPad 上它看起来像菱形。 _btnthu
我有一个适用于 iPad 的数学程序,它使用 Big Number 库进行计算,然后根据这些计算更新 UIView (myView) 中最多包含 20,000 个 UILabel 的数组。 计算可能需
我注意到的奇怪的事情: let navController = UINavigationController(rootViewController: myRootViewController) nav
我的主视图有一个 subview ,我使用以下扩展添加了一个掩码: extension UIView{ func addTopRoundCorners(){ let bezierPath =
我是一名优秀的程序员,十分优秀!