首页 > 解决方案 > 管理iphone8和iphone12 swift中的底部按钮

问题描述

在 iPhone8 之类的矩形边缘设备中,我需要一个底部按钮卡在带有尖角的底部边缘。在 iPhone12 之类的弯曲边缘设备中,我需要一个底部按钮,在右下角有一定距离,并带有角半径。

如何在情节提要上管理它?请检查下图以获得更好的理解。

在此处输入图像描述

在此处输入图像描述

标签: iosswiftautolayouttraitsiphone12

解决方案


据我所知,故事板没有直接的方法来实现这一点。如果我是你,我会

  1. 检查设备是否有弯曲边缘(即设备是iPhone X或更高型号)然后
  2. 根据上述检查以编程方式设置按钮约束。

没有提供用于检查设备是否具有弯曲边缘的官方 API,但这是我的解决方案,所以如果有人知道更好的 hack,请告诉我。

extension UIDevice {
    var iPhoneXOrAboveModel: Bool {
        return UIScreen.main.nativeBounds.height >= 2436
    }
}

现在,您可以在视图控制器中使用此扩展并约束您的按钮。

if UIDevice.current.iPhoneXOrAboveModel {
            // Has curved edges
            NSLayoutConstraint.activate([
                button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
                button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant:  -20)
            ])
            button.layer.cornerRadius = 12
        } else {
            // Has square edges
            NSLayoutConstraint.activate([
                button.leadingAnchor.constraint(equalTo: view.leadingAnchor),
                button.trailingAnchor.constraint(equalTo: view.trailingAnchor)
            ])
        }

推荐阅读