问题标签 [viewdidlayoutsubviews]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 为什么 viewDidLayoutSubviews 仅在第一次运行时被调用两次?
这让我快疯了。只有在第一次运行时 viewDidLayoutSubviews 才会被调用两次。
这是我正在使用的代码:
在我的 ViewController 我称之为:
xcode - 覆盖子视图中 UIButton 的自动布局中心值 @ viewDidLayoutSubviews
我将 Autolayout 用于相当复杂的菜单,并且确实需要它。我的菜单的所有按钮、UIViews 等都在一个名为“menuSubview”的单独 UIView 中。
如果用户按下一个按钮,整个“menuSubview”就会移动到另一个位置以显示菜单的其他部分。有时 menuSubview 中的按钮也会移动。我总是保存“菜单状态”(在 get-set 变量“lastMenu”中使用 Userdefaults),并具有根据保存的“菜单状态”设置 alpha 和中心的功能。
我尝试在 viewDidAppear、viewDidLayoutSubview 中调用“openLastMenu”函数——ViewController 的所有“viewDid”函数。按钮的“menuSubview”中心和 alpha 始终按预期运行......但按钮的中心根本不会 - 无论我调用什么“viewDid”函数。
(代码要复杂得多——我把它归结为调试和陈述我的观点)
为了调试,我什至制作了一个按钮子类来获取带有“didSet”的“中心”值,如果它们发生变化。似乎在采用正确的值后,它们再次更改为它们的 Autolayout-Position。
...哦,忽略按钮上带有“translatesAutoresizingMaskIntoConstraints”的约束总是会搞砸整个菜单。我开始在这里发疯了:)
ios - UIView 什么时候知道它有多大?
我有一个 UIView 的子类,它使用 CAShapeLayers 在自身上绘制图片。我希望绘图适应 AutoLayout 给出的 UIView 的任何大小。我给它一个drawGraph()
函数,从它获取当前大小.bounds.size
,然后绘制一张适合的图片。
我首先在容器 UIViewController's 中调用我的绘图函数viewDidLoad()
,但此时布局尚未发生,因此它具有故事板中的任何边界。
我尝试从视图控制器调用它viewDidLayoutSubviews()
,但这也不完全令人满意。它被调用了两次:首先使用情节提要的边界,然后再次使用更新的(正确的)边界。两者之间有一个暂停,因此用户可以看到绘制和重绘。
如何判断 UIView 是否已应用其布局约束并准备好为我提供准确的尺寸?
ios - 被 viewController 方法的奇怪行为搞糊涂了
我已经覆盖了一个方法
现在发生的事情是,当我在 Iphone 6、6+ 上运行我的应用程序时,一切正常。iphone5
但是,当我在(模拟器 + 真实设备)上运行相同的代码时,viewDidLayoutSubViews
会被无限次调用,并且我的应用程序变得无响应。我通过使用布尔变量解决了这个问题。但我不明白为什么会这样。所以有人可以向我解释一下。
谢谢 :-)
swift - 斯威夫特:子视图监听父调用viewDidLayoutSubviews
我有一个自定义集合视图,其单元格大小由视图控制器确定。因为布局是在单元格大小之前设置的(单元格大小设置在 中cellForItemAtIndexPath
),所以布局不能正常工作,除非它设置在视图控制器的viewDidLayoutSubviews
. 有没有办法让自定义集合视图在视图控制器调用时进行监听viewDidLayoutSubviews
?我想尽可能多地保留在自定义集合视图中。
先感谢您!
ios - 使用 UINavigationController 弹出顶视图时不再调用 viewDidLayoutSubviews
iOS 10,不断打破的礼物,似乎改变了另一种行为。
假设两个 UIViewController 被推送到一个 UINavigationController 上。
在 iOS 8/9 上,调用navigationController?.popViewController(animated: true)
弹出顶部 UIViewController(比如 VC2)会导致viewDidLayoutSubviews
底部视图控制器(比如 VC1)被调用。
我们依靠这个来刷新VC1。有时 VC2 向 VC1 添加子视图(通过数据模型),这需要在弹出回 VC1 时反映出来。
需要准确的帧信息。我们无法使用viewWillAppear
,因为iOS 9 上的帧数据错误。问题viewDidAppear
是在最初看到视图和调整之间存在短暂的故障。
viewDidLayoutSubviews
现在弹出 VC2 时不会调用VC1 。
1)这是一个viewDidLayoutSubviews
不能被调用的错误吗?
2) 使用 UINavigationController 弹出时刷新视图控制器的正确方法是什么?
ios - 究竟什么是 viewDidLayoutSubviews?
我正在阅读以下内容的viewDidLayoutSubviews
描述UIViewController
:
被调用来通知视图控制器它的视图刚刚布置了它的子视图 [...] 但是,这个方法被调用并不表示视图子视图的各个布局已经被调整。每个子视图负责调整自己的布局 [...]。
对我来说,这意味着:“当子视图的布局完成时调用,但实际上这不是真的”。那么真正的背后是viewDidLayoutSubviews
什么?
ios - 如何在 Swift/iOS 中获取特定于设备大小的自动布局的回调?
在自动布局完成运行应用程序的设备的布局后,我想在我的 UIView 中放置几个按钮/图像。例如,在我的故事板中,我将屏幕尺寸设置为 iPhone 7。但是在设备(比如 iPad)的自动布局完成后,我想放置几个UIImagesView
(s)。我计划使用viewDidLayoutSubviews
,但似乎在每个布局之后都会调用它,即当我的应用程序执行达到这个特定值UIViewController
时,首先viewDidLayoutSubviews
调用 iPhone 7 大小的屏幕,然后它会根据当前设备大小调整情节提要中的所有元素(通过为iPad)和viewDidLayoutSubviews
之后第二次调用。现在这对我来说是个问题,因为我绘制的图像视图的位置取决于情节提要中某些元素的位置。所以本质上,我画了两次图像视图(一次考虑 iPhone 7 尺寸,第二次考虑设备尺寸)。我只想要后者。有没有办法知道当前设备大小的自动布局何时发生?
uiview - 在哪里放置父视图使用自动布局的 UIView 的手动布局代码?
当父视图本身使用自动布局时,我拥有的特定子 UIView 应该在哪里放置手动布局代码(或在哪里触发它)?
笔记:
- 视图的布局代码需要在任何父视图布局、方向更改、特征更改等之后使用其框架尺寸
- 我曾尝试在父视图控制器上使用 viewWillLayoutSubviews,但在多次调用它时遇到困难 - 无法追查为什么但不想多次手动布局计算,因为它们很繁重。
- 因此,总体而言,对于以下各种场景,最终只有一个手动布局的“触发”,并且在所有旋转和父视图布局完成时:
所以:
- 加载时 (viewDidLoad)
- 重新显示(就像视图随后确实出现了)
- 回转
- 性状改变
例如,我应该寻找一种方法:
a)父视图控制器来控制它并确定何时向我的特定子视图(由它自己的视图控制器前置)发送“layoutSubviewNow”调用,但在这种情况下如何执行此操作,或 b)
b)让子视图对“layoutSubview()”做出反应,然后有一个委托可用于回调主控制器以请求布局数据?或
c) 类似于 b) 但使用子视图视图控制器“viewWillLayoutSubviews()”来触发,然后有一个委托可用于回调主控制器以请求布局数据?
或其他?
其实我在想这个主意:
d) 在主父视图控制器中:有一个实例变量 viewTransistionedOutstandingAction,并使用它以便 (i) 在 viewWillTransition 中将其设置为 true,然后在 (ii) viewWillLayoutSubviews 中执行以下操作:
ios - iOS 10 自动布局 - 重复调用 viewDidLayoutSubviews
整个 Storyboard 都启用了 AutoLayout。
当我将日志放入viewDidLayoutSubviews()时,我可以看到它被反复调用,并且永不停止。
我在视图控制器中没有任何自动布局红旗。
这可能是什么原因造成的?调试此问题的最佳方法是什么?...找出哪个视图正在苦苦挣扎?
更新
原来是一个 UILabel 制造了这个麻烦。即使它具有所有 4 个约束(x、y、宽度、高度)它似乎正在调用树上的重新布局......