模态视图未正确显示底部视图

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 中的约束设置不正确。