gpt4 book ai didi

ios - 隐藏状态栏 iOS 11 时安全区域插入发生变化

转载 作者:可可西里 更新时间:2023-11-01 03:28:59 26 4
gpt4 key购买 nike

在我们的应用中,我们暂时隐藏状态栏作为在两个需要不同状态栏样式的屏幕之间转换的动画的一部分。

我们有一个百分比驱动的动画过渡,当它开始时,用动画隐藏状态栏,当完成时重新显示状态栏。

在 iOS 11 上,安全区域插图包括可变的状态栏高度,当隐藏时,安全区域的顶部插图下降到 0 高度。这会重新调整我们所有的 View ,并在 View 大小之间出现可怕的跳跃。

由于我们正在尝试支持 iPhone X,因此我们仍然希望将我们的 View 限制在安全区域。

我们可以在隐藏状态栏时暂时禁用对安全区域插图的更改吗?

最佳答案

设置到安全区域的约束受状态栏以及 View 在屏幕上的实际位置及其转换的影响。如果您总是只想将顶部(或底部)安全区域高度应用于 View 约束,则可以改用自定义约束来实现。

下面的约束会自动将其常量值设置为设备顶部安全区域高度的高度,不受状态栏或其他参数的影响。要使用它,将 any 约束的类更改为这个,它们的 constant 将始终是安全区域高度。请注意,当设备旋转时,它不会更改其值。

objective-C

@interface TopSafeAreaContraint : NSLayoutConstraint

@end

@implementation TopSafeAreaContraint

- (void)awakeFromNib {
[super awakeFromNib];

if (@available(iOS 11.0, *)) {
UIEdgeInsets insets = [UIApplication sharedApplication].keyWindow.safeAreaInsets;
self.constant = MAX(insets.top, 20.0);
} else {
// Pre-iOS 11.0
self.constant = 20.0;
}
}

@end

swift

class TopSafeAreaConstraint: NSLayoutConstraint {
override func awakeFromNib() {
super.awakeFromNib()
if #available(iOS 11.0, *) {
let insets = UIApplication.shared.keyWindow?.safeAreaInsets ?? .zero
self.constant = max(insets.top, 20)
} else {
// Pre-iOS 11.0
self.constant = 20.0
}
}
}

关于ios - 隐藏状态栏 iOS 11 时安全区域插入发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46880614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com