1

我有一个名为 headerview 的 UIView,我像 NavigationBar 一样使用它。它具有 60 的恒定大小和 0 的上/左/右布局约束。由于安全区域布局,除了 iPhone X 之外的所有设备看起来都不错。如果我将尺寸更改为 90,它在 iPhone X 上看起来不错,但现在在其他设备上看起来不对。我用下面的代码计算安全区域的高度并将其添加到高度,但现在它在其他设备中看起来很小。解决此问题的最佳方法是什么?

    if (@available(iOS 11.0, *)) {
    UIWindow *window = UIApplication.sharedApplication.keyWindow;
    CGFloat topPadding = window.safeAreaInsets.top;
    self.headerViewHeight.constant = 46 + topPadding;
}
4

3 回答 3

4

试试这个。检查手机是否为 iPhoneX(如果 iPhoneX,顶部填充大于 0)

if (@available(iOS 11.0, *)) {
    UIWindow *window = UIApplication.sharedApplication.keyWindow;
    CGFloat topPadding = window.safeAreaInsets.top;
    self.headerViewHeight.constant = (topPadding>0) ? 46+topPadding : 60;
 }
于 2017-11-29T08:00:08.420 回答
3

使用这个(快速 3):

constraint_heightTopBar.constant = UIApplication.shared.statusBarFrame.maxY + 44

它为所有其他设备提供标准高度 64,为 iPhoneX 提供 88。您可以根据需要调整值“44”。
请记住,其他设备的状态栏高度为 20,PhoneX 为 44。所以您只需要根据需要设置视图高度。剩下的就完成了。
它适用于所有 iOS 版本和所有设备 :-)

对于 objC,使用 CGRectGetMaxY(frame)。

于 2017-12-11T09:22:52.557 回答
1

如果您使用 >= iOS 13,那么

CGFloat safeAreaGap = 0;
UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
if (window != nil) {
    safeAreaGap = window.safeAreaInsets.bottom; // for bottom
    safeAreaGap = window.safeAreaInsets.top; // for top
}

或者

if let window = UIApplication.shared.windows.first {
    self.safeAreaInsetsBottom = window.safeAreaInsets.bottom
}
于 2021-02-19T04:36:16.993 回答