在我们的应用程序中,我们暂时隐藏状态栏作为动画的一部分,在两个需要不同状态栏样式的屏幕之间进行转换.
我们有一个百分比驱动的动画过渡,在启动时,用动画隐藏状态栏,完成时显示状态栏.
在iOS 11上,安全区域插入包括可变的状态栏高度,当隐藏时,安全区域的顶部插入下降到0高度.这会重新调整我们的所有视图,并且在视图大小之间会出现可怕的跳跃.
我们仍然希望将我们的观点限制在安全区域,因为我们正在努力支持iPhone X.
隐藏状态栏时,我们可以暂时禁用对安全区域insets的更改吗?
设置为的约束safe area受状态栏以及视图在屏幕上的实际位置及其转换的影响。如果您始终只想对视图约束应用顶部(或底部)安全区域高度,则可以改用自定义约束。
以下约束将自动将其constant值设置为设备顶部安全区域高度的高度,不受状态栏或其他参数的影响。要使用它,请将任何约束的类更改为此,它们constant将始终是安全区域的高度。请注意,旋转设备时不会更改其值。
对象
@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
Run Code Online (Sandbox Code Playgroud)
迅速
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |