gpt4 book ai didi

ios - 为什么 (isMovingToParentViewController) 中的代码不在 viewDidLayoutSubviews() 中运行

转载 作者:行者123 更新时间:2023-11-30 11:02:34 26 4
gpt4 key购买 nike

我有一个 viewController,我正在使用 anchor ,我想获取按钮的框架。我只需要 View 被推送时的框架,因此我使用 isMovingToParentViewController 。像这样:

if isMovingToParentViewController {

let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}

当我将其添加到 viewWillAppear 中时,获取按钮框架的代码会运行,但是当我将相同的代码添加到 viewDidLayoutSubviews 中时,它不会运行。

这是为什么?

要清楚的是,当我在viewDidLayoutSubviews中添加断点时,它确实会命中if isMovingToParentViewController,但其中的代码内部永远不会被命中。

当 View 在 isMovingToParentViewController 上推送时被击中,当它弹出 isMovingToParentViewController 不会被击中。

override func viewDidLoad() {
super.viewDidLoad()

// anchors are set here but the frames haven't been set yet
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

if isMovingToParentViewController {

// this code runs
let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

if isMovingToParentViewController {

// this code NEVER runs
let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}
}

最佳答案

header 文档指出 isMovingToParentViewController 和其他 3 个方法仅在 viewWillAppear 等外观回调中有效,因此在 viewDidLayoutSubviews 等布局回调中无效.

/*
These four methods can be used in a view controller's appearance callbacks to determine if it is being
presented, dismissed, or added or removed as a child view controller. For example, a view controller can
check if it is disappearing because it was dismissed or popped by asking itself in its viewWillDisappear:
method by checking the expression ([self isBeingDismissed] || [self isMovingFromParentViewController]).
*/

#if UIKIT_DEFINE_AS_PROPERTIES
@property(nonatomic, readonly, getter=isBeingPresented) BOOL beingPresented NS_AVAILABLE_IOS(5_0);
@property(nonatomic, readonly, getter=isBeingDismissed) BOOL beingDismissed NS_AVAILABLE_IOS(5_0);

@property(nonatomic, readonly, getter=isMovingToParentViewController) BOOL movingToParentViewController NS_AVAILABLE_IOS(5_0);
@property(nonatomic, readonly, getter=isMovingFromParentViewController) BOOL movingFromParentViewController NS_AVAILABLE_IOS(5_0);
#else
- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);
- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);

- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);
#endif

关于ios - 为什么 (isMovingToParentViewController) 中的代码不在 viewDidLayoutSubviews() 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53150763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com