- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我移动 UISlider
时,我的 ViewController 的 viewDidLayoutSubviews()
方法被重复调用。 (我需要它被调用一次,这样我才能计算出 subview 的大小——viewDidLoad()
在这个过程中太早了——但是当我拖动 UISlider
.)
如有任何想法,我们将不胜感激!
最佳答案
UISlider
使用 slider 和轨道部分的 subview 绘制自己。这是一个简单的测试应用程序的 View 层次结构:
<UIWindow: 0x7d26cf90; frame = (0 0; 320 480); autoresize = W+H; gestureRecognizers = <NSArray: 0x7d2609a0>; layer = <UIWindowLayer: 0x7d25f0c0>>
| <UIView: 0x7d27d530; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x7d27cec0>>
| | <UISlider: 0x7d27d700; frame = (14 225; 292 31); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7d27d960>; value: 0.513699>
| | | <UIView: 0x7b755a50; frame = (150 15; 140 2); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7b7559d0>>
| | | | <UIImageView: 0x7b7551d0; frame = (-148 0; 288 2); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7b755410>>
| | | <UIImageView: 0x7b755640; frame = (2 15; 148 2); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7b755720>>
| | | <UIImageView: 0x7d5c3450; frame = (134 0; 31 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7d5c4750>>
| | | | <UIImageView: 0x7d5c44a0; frame = (-13 -6.5; 57 43.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7d5c6c20>>
| | <_UILayoutGuide: 0x7d27daa0; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x7d27ccf0>>
| | <_UILayoutGuide: 0x7d27e020; frame = (0 480; 0 0); hidden = YES; layer = <CALayer: 0x7d27e0f0>>
请注意,UISlider
共有五个后代 View 。这是您不应依赖的实现细节,但有助于了解正在发生的事情。
当 slider 需要改变它的值时,它会将它的新值存储在一个实例变量中并设置它自己的 needsLayout
标志。最终,运行循环到达布局阶段, View 层次结构布局被更新,从窗口开始并沿着层次结构向下进行。当它到达 slider 时, slider 根据其值和其他实例变量更新其 subview 的帧。
如果您需要知道 subview 的大小,您可能需要自己调用 layoutIfNeeded
,然后立即获取 subview 的大小,以便布局在您的控制下进行。
关于ios - 为什么在我移动 UISlider 时调用 viewDidLayoutSubviews()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989068/
我很难弄清楚为什么 Erica Sadun 在她的食谱示例 Ch07-11 中执行以下操作(在 viewDidLayoutSubviews 中调用 viewDidAppear)。也许这两种方法应该调用
我有一个在 UIStoryboard 中使用 UITableView 设置的 View Controller 。 UITableView 在所有四个边上都被限制在 Controller 的 SafeA
首先,我应该提一下,这主要是一个效率问题。 有很多关于在哪里进行帧计算的讨论,其中 viewWillAppear 太早而 viewDidAppear 太晚( View 已经可见)。 常见的答案是在 v
我正在阅读 UIViewController 的 viewDidLayoutSubviews 的描述: Called to notify the view controller that its vi
我正在寻找仅调用一次的 viewDidLayoutSubviews 的替代方案。 我使用此代码将登录移出 View : override func viewDidLayoutSubviews() {
iOS 13 中的 viewdidlayoutsubviews 进行了一些更改,导致在完成第一次调用后,它会在 View Controller 生命周期的后期调用(在改变框架时)。这会在应用程序中产生
我听说viewDidLayoutSubviews当我们使用约束时,这是更改布局的最佳位置。 所以我跳到viewDidLayoutSubviews 我创建了三个 UIViews和 SubViewed他们
viewWillAppear 和有什么区别和 viewDidLayoutSubviews . 我知道 viewDidLoad View 的大小是未知的。其他两种方法呢?哪个更好使用调整 subview
我有一个 View Controller ,其中 View 是手动布局的(没有 xib)。这是在 viewDidLayoutSubviews 中完成的.我想为其中一个 View 设置动画,但动画不起作
Apple 文档关于 viewDidLayoutSubviews说: When the bounds change for a view controller's view, the view adj
我正在使用下面的代码添加一个按钮渐变 extension UIView { func applyGradient(colors: [UIColor]) { self.apply
我有一个只应偶尔出现的 UIButton。在 viewDidLayoutSubviews 中,我执行了以下操作: override func viewDidLayoutSubviews() {
我在 ovalView 中有一个 imageView,受自动布局限制。 在 viewDidLayoutSubviews() 中,我正在创建一个 UILabel let label = UILabel(
我在 viewDidLayoutSubviews 下有代码,目的是在开始时使图像透明(alpha = 0),然后使用 viewDidAppear 下的代码慢慢淡入(进入 alpha = 1) >。另外
我有一些方形按钮,我想为其添加与按钮高度成比例的圆角。在我的应用程序的过去版本中,我使用 viewDidLayoutSubviews() 毫无问题地实现了此功能。出于某种原因,在推出具有我调整过的其他
这让我发疯。只有在第一次运行时,viewDidLayoutSubviews 才会被调用两次。 这是我使用的代码: class CICViewController: UIViewController {
当 View Controller 的 View 首次显示时,我想运行一个动画,其中 View Controller 中的所有元素都从屏幕底部外部滑动到它们的自然位置。为此,我在 viewDidLay
设置: 我有一个由 View 和 Container View 组成的 View Controller 。 我已经使用类大小设置了View 和Container View。 下面的代码添加了渐变效果:
当我移动 UISlider 时,我的 ViewController 的 viewDidLayoutSubviews() 方法被重复调用。 (我需要它被调用一次,这样我才能计算出 subview 的大小
感恩节快乐,如果你庆祝它! 我在 Storyboard上有一个 UIImageView,设置了 4 个约束。中心 x 约束有一个标识符集(通过 Storyboard)“imageViewTwoCent
我是一名优秀的程序员,十分优秀!