模态视图未正确显示底部视图
Modal View not displaying bottom view correctly
我目前正在展示一个底部有视图的模式。不幸的是,当显示模态时,视图控制器被向下推了一些并切断了该控制器上的底部视图。有没有一种方法可以计算将视图向下推多少以将底部视图移高一点?提前致谢!
我正在通过导航控制器展示我的模式:
self.navigationController?.present(vc, animated: true, completion: nil)
在模态呈现视图控制器上,添加视图如下:
if let b = Bundle.main.loadNibNamed(String.init(format: "%@", "MyView"), owner: self, options: nil) {
if let addedView = b[0] as? MyViewButton {
addedView.configureOnScreen(view: self.View)
}
}
我在扩展 UIView 的自定义 class 中展示我的底部视图:
func configureOnScreen(view: UIView) {
let width = view.frame.width - self.frame.width
let height = view.frame.height - self.frame.height
self.frame = CGRect.init(x: width, y: height, width: self.frame.width, height: self.frame.height)
view.addSubview(self)
}
如果您在 XIB 中正确设置了约束,因此它们为其指定了宽度和高度,您可以使用自动布局来定位加载的视图。
根据您的代码,您似乎想要右下角的视图?
因此,忘掉 MyViewButton
class 中的 configureOnScreen()
函数,而是像这样尝试:
class PresentMeVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let b = Bundle.main.loadNibNamed(String.init(format: "%@", "MyView"), owner: self, options: nil) {
if let addedView = b[0] as? MyViewButton {
addedView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(addedView)
// respect the safe-area
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
addedView.trailingAnchor.constraint(equalTo: g.trailingAnchor),
addedView.bottomAnchor.constraint(equalTo: g.bottomAnchor),
])
}
}
}
}
编辑
尝试澄清尺寸/定位...
如果我们从这两个视图控制器开始:
右下角的蓝色按钮大小和位置完全相同 - 将 Trailing 和 Bottom 限制在安全区域。
启动时,它看起来像这样(我们在导航控制器中):
顶部按钮显示第二个控制器:
中间按钮全屏显示第二个控制器:
底部按钮将其推入导航堆栈:
请注意,第二个控制器的 Height 根据其显示方式而变化...控制器的 bottom 不是被“压低”。
因此,如果您的按钮被切断的次数超过此处显示的次数,那么您的 XIB 中的约束设置不正确。
我目前正在展示一个底部有视图的模式。不幸的是,当显示模态时,视图控制器被向下推了一些并切断了该控制器上的底部视图。有没有一种方法可以计算将视图向下推多少以将底部视图移高一点?提前致谢!
我正在通过导航控制器展示我的模式:
self.navigationController?.present(vc, animated: true, completion: nil)
在模态呈现视图控制器上,添加视图如下:
if let b = Bundle.main.loadNibNamed(String.init(format: "%@", "MyView"), owner: self, options: nil) {
if let addedView = b[0] as? MyViewButton {
addedView.configureOnScreen(view: self.View)
}
}
我在扩展 UIView 的自定义 class 中展示我的底部视图:
func configureOnScreen(view: UIView) {
let width = view.frame.width - self.frame.width
let height = view.frame.height - self.frame.height
self.frame = CGRect.init(x: width, y: height, width: self.frame.width, height: self.frame.height)
view.addSubview(self)
}
如果您在 XIB 中正确设置了约束,因此它们为其指定了宽度和高度,您可以使用自动布局来定位加载的视图。
根据您的代码,您似乎想要右下角的视图?
因此,忘掉 MyViewButton
class 中的 configureOnScreen()
函数,而是像这样尝试:
class PresentMeVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let b = Bundle.main.loadNibNamed(String.init(format: "%@", "MyView"), owner: self, options: nil) {
if let addedView = b[0] as? MyViewButton {
addedView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(addedView)
// respect the safe-area
let g = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
addedView.trailingAnchor.constraint(equalTo: g.trailingAnchor),
addedView.bottomAnchor.constraint(equalTo: g.bottomAnchor),
])
}
}
}
}
编辑
尝试澄清尺寸/定位...
如果我们从这两个视图控制器开始:
右下角的蓝色按钮大小和位置完全相同 - 将 Trailing 和 Bottom 限制在安全区域。
启动时,它看起来像这样(我们在导航控制器中):
顶部按钮显示第二个控制器:
中间按钮全屏显示第二个控制器:
底部按钮将其推入导航堆栈:
请注意,第二个控制器的 Height 根据其显示方式而变化...控制器的 bottom 不是被“压低”。
因此,如果您的按钮被切断的次数超过此处显示的次数,那么您的 XIB 中的约束设置不正确。