[适配] Storyboard布局,底部按钮莫名跳动?

473 阅读1分钟

现象

Push Storyboard按钮事件Push到最后一个页面。 Back Button先从Tab Bar(此时已经隐藏了)的顶部,然后回到底部。 用为代码描述,大概是经历了

back.bottomConstraint.constant = -tabbarHeight;
back.bottomConstraint.constant = 0.0f;

环境

  • iOS 10.3.3
  • Storyboard布局
  • 视图层级

  • 最后一页,Back Button布局

  • Hide Bottom Bar on Push: YES

原因

这里是他们的见解

这里发现一个和我一样的问题,很早了,我给了答案

Safe AreaiOS 11的特性,对iOS 10支持得不太好(< iOS 11估计都有问题),需要做适配。

但奇怪的是,我还没发现Safe Area Top需要适配,显然Safe Area Bottom需要。

解决办法

底部约束Safe Area都改成Superview

然后绑定约束为属性,代码适配,代码像这样

@interface YourViewController ()

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;

@end

@implementation YourViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat bottomValue = 0.0f; // your value
    UIEdgeInsets edgeInsets = UIApplication.sharedApplication.keyWindow.layoutMargins;
    CGFloat bottomInset = edgeInsets.bottom;
    self.bottomConstraint.constant = - bottomInset - bottomValue;
}
@end

为什么

为啥不用直接Storyboard适配,因为Storyboard没办法搞这种适配,可能是我没找到,有的话告诉我❤️