gpt4 book ai didi

ios - 当 View 位于 View 层次结构的顶部时,以编程方式使用自动布局在屏幕上居中 UIView

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:05:32 28 4
gpt4 key购买 nike

我已经实现了一个弹出式 UIView,我通过 [[[[UIApplication sharedApplication] windows] lastObject] addSubview:popupView] 添加到最顶层的窗口,因此它会出现在所有内容之上,甚至是键盘。我需要确保我以编程方式创建的这个弹出 View 将始终保持在屏幕中心。我试图添加自动布局约束,但它不喜欢我试图与最顶层窗口对齐的事实。你能告诉我如何做到这一点吗?谢谢。

这就是我已经实现的,它将生成一个(非常详细的)错误,指出“ View 层次结构没有为约束准备......约束的项目必须是该 View 的后代”:

    [popupView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSLayoutConstraint *cn = nil;
cn = [NSLayoutConstraint constraintWithItem:popupView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:[[[UIApplication sharedApplication] windows] lastObject]
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[popupView addConstraint:cn];
cn = [NSLayoutConstraint constraintWithItem:popupView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:[[[UIApplication sharedApplication] windows] lastObject]
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0];
[popupView addConstraint:cn];
cn = [NSLayoutConstraint constraintWithItem:popupView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:blockSize.height];
[popupView addConstraint:cn];
cn = [NSLayoutConstraint constraintWithItem:popupView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:blockSize.width];
[popupView addConstraint: cn];

最佳答案

不要将您的 View 贴在一个不是专门为保存您的 View 而设置的窗口中。您不知道该窗口的真正所有者现在或在未来的 iOS 版本中可能会做什么。

创建您自己的窗口并将其 windowLevel 设置得足够高,使其位于键盘上方。为新窗口提供它自己的 Root View Controller (这样它将正确处理不同的方向)并将弹出 View 居中在该 Root View Controller 的 View 中。

您会在 this question 的答案中找到很多有用的信息.

关于ios - 当 View 位于 View 层次结构的顶部时,以编程方式使用自动布局在屏幕上居中 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190404/

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