我实现了一个弹出UIView,我通过[[[[UIApplication sharedApplication] windows] lastObject] addSubview:popupView]
将其添加到最顶部的窗口中,因此它会出现在所有内容的顶部,甚至包括键盘。我需要确保以编程方式创建的该弹出视图将始终在屏幕上居中。我试图添加自动布局约束,但是它不喜欢我试图与最上面的窗口对齐的事实。你能让我知道我该怎么做吗?谢谢。
这是我已经实现的,将产生一个(非常详细的)错误,指出“未为约束准备视图层次结构……约束的项目必须是该视图的后代”:
[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];
最佳答案
将高度和宽度约束添加到popupView是可以的,但是由于popupView是窗口的子视图,因此应该将居中约束添加到窗口,而不是popupView(并且您需要先将popupView作为子视图添加,然后再添加添加约束)。
关于ios - 当 View 位于 View 层次结构的顶部时,使用自动布局以编程方式在屏幕上居中放置UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23190404/