我读了许多与我的问题类似的问题的答案。但我仍然无法解决这个问题。
我将UIView添加到另一个UIView之上。
@IBOutlet weak var contentView: UIView!
以下是我在contentView上添加另一个视图的方法。
func showPopupView(){
popupView.bounds.size.width = contentView.bounds.size.width
popupView.bounds.size.height = self.view.frame.height - 99
popupView.frame.origin.y = contentView.frame.origin.y + 50
popupView.center.x = contentView.center.x
view.addSubview(popupView)
}
我将99计算为49 + 50. 49是TabBar高度的高度,50是顶部视图的高度。
但是,弹出视图未在所有模拟器大小上显示。它在iPhone SE上按预期显示,但在iPhone 6,iPhone 6s或iPhone X上存在间隙。
如何在超级视图(self.view
)上定位弹出视图?
答案 0 :(得分:0)
您的方法在几个级别上都是错误的。
你有几个"魔术数字"在你的代码中
您正在操纵您的视图框架。不要这样做。自动布局可能会破坏您的尺寸和位置。而是创建自动布局约束(看看布局锚点。它们非常容易使用。)
答案 1 :(得分:0)
您可以尝试这样的事情
NSLayoutConstraint.activate([
popupView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 50),
popupView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
popupView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor)
])
if #available(iOS 11.0, *) {
NSLayoutConstraint.activate([
popupView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)])
} else {
NSLayoutConstraint.activate([
popupView.bottomAnchor.constraint(equalTo: self.bottomLayoutGuide.topAnchor)])
}
答案 2 :(得分:0)
我高度建议使用autolayout
,而不是硬编码:
class SomeController: UIViewController {
@IBOutlet weak var contentView: UIView!
func showPopupView() {
let popupView = UIView() // or any other way how your `popupView` should be initialized
view.addSubview(popupView) // Adding popup view before the setting anchors
popupView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor) // constant is 0 by default, could be any else
popupView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) // constant is 0 by default, could be any else
popupView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 50) // same top position as `contentView`'s top plus 50 points
popupView.heightAnchor.constraint(equalTo: contentView.heightAnchor, constant: -100) // same haight as `contentView`'s haight minus 100 points
}
}
注意:我假设contentView
是view
的子视图。此外,在使用popupView
之前,应将anchors
添加到子视图中。
答案 3 :(得分:0)
我终于设法通过下面的代码在所有设备类型上正确定位我的popupView。
func showPopupView(){
let statusBarHeight = self.view.safeAreaInsets.top
showPopupView.frame.size.width = contentView.frame.size.width
showPopupView.frame.size.height = contentView.frame.height
showPopupView.frame.origin.y = contentView.frame.origin.y + statusBarHeight
showPopupView.center.x = contentView.center.x
view.addSubview(showPopupView)
}
使用此代码,popupView
获取contentView
的高度和宽度。考虑到statusBarHeight
,在当前视图中将其置于其顶部。