美文网首页
适配iPhone X UITabBar及UITableView偏

适配iPhone X UITabBar及UITableView偏

作者: ColaBean | 来源:发表于2017-09-21 16:16 被阅读553次

    Xcode Release版本出来了,iPhone的适配也在悄然进行中。此篇文章就此针对iPhone X的UITabBar做适配。

    UITabBar 偏移问题

    当在push到下一界面时,并设置hidesBottomBarWhenPushedYES将会出现Figure-1的情况 -- UITabBar向上偏移34pt即蓝色区域。下面提供一个safeAreaInsets变化的过程:

    deltaVaue = 83 - 49 = 34

    2017-09-21 15:32:50.063642+0800 ios11NavBar[3698:126162] viewSafeAreaInsetsDidChange:{44, 0, 83, 0}
    2017-09-21 15:32:50.070815+0800 ios11NavBar[3698:126162] DidLayout-containerView: {{0, 0}, {375, 812}}
    2017-09-21 15:32:56.447208+0800 ios11NavBar[3698:126162] viewSafeAreaInsetsDidChange:{44, 0, 49, 0}
    2017-09-21 15:32:56.447649+0800 ios11NavBar[3698:126162] DidLayout-containerView: {{0, 0}, {375, 778}}
    2017-09-21 15:32:56.448666+0800 ios11NavBar[3698:126162] viewSafeAreaInsetsDidChange:{44, 0, 83, 0}
    2017-09-21 15:32:56.448890+0800 ios11NavBar[3698:126162] DidLayout-containerView: {{0, 0}, {375, 812}}
    
    
    Figure-1

    解决方案

    继承UITabBarController,修改UITabBarY坐标值。不是最优方案,如果有较好的方案希望大家能不啬指点一二。

    - (void)viewDidLayoutSubviews {
        [super viewDidLayoutSubviews];
        //TODO: adapt tabbar's y value.
        if ([RTDeviceHardware iPhoneXDevice]) {
            CGFloat deltaTabBarY = SCREEN_HEIGHT - CGRectGetHeight(self.tabBar.frame);
            self.tabBar.frame = (CGRect){0, deltaTabBarY, self.tabBar.bounds.size};
        }
    }
    

    最终效果如图

    Figure-2

    UITableView 刷新后偏移问题

    在iOS11上,设置UITableViewstyleUITableViewStyleGrouped时,并且行高大于220(囧 项目中有类似问题,又经过反复验证我就大胆预估了一个值,220就由此得来),当push再pop回来刷新列表 就会导致列表偏移,并没有停留在之前的位置。

    Figure-3

    解决方案

    //TODO: iOS 11之后,预估值有默认高度,如果不需要就设置0
     _tableView.estimatedRowHeight = 0;//这里需要吐槽下,如果不设置为0 就会出现刷新后偏移问题。        
     _tableView.estimatedSectionHeaderHeight = 0;        
     _tableView.estimatedSectionFooterHeight = 0;
    

    Demo

    相关文章

      网友评论

          本文标题:适配iPhone X UITabBar及UITableView偏

          本文链接:https://www.haomeiwen.com/subject/xsazsxtx.html