iPhoneX 适配TabBar高度

[复制链接]
21 9

马上注册,跟各大iOS开发大神交流、切磋。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在viewWillAppear时 tabbar高度是49(默认高度?)
在viewDidAppear时 tabbar高度是83(真实准确高度)

可我在viewDidLoad时候就开始绘制界面了 如何适配?

其实顶端高度也变了 (普通是 statusBarHeight + navigationBarHeight)
navigationBarHeight默认44 (iPhoneX 88)
statusBarHeight可以通过 [[UIApplication sharedApplication] statusBarFrame].size.height 拿到(除iPhoneX都是20 iPhoneX是44)


但我不知道 tabbar真实高度是 ? + ? 怎么办




上一篇:阿里云 视频点播 签名机制 生成有问题 各位做过的 帮忙看看 指点一下谢谢 ...
下一篇:WKWebveiw NSURLRequestReturnCacheDataElseLoad缓存不了大于10M的pdf

举报 使用道具

回复

9 个评论

icelovechao  新手上路  发表于 2019-3-7 12:23:46  | 显示全部楼层
在viewWillAppear时 tabbar高度是49(默认高度?)
在viewDidAppear时 tabbar高度是83(真实准确高度)

可我在viewDidLoad时候就开始绘制界面了 如何适配?

其实顶端高度也变了 (普通是 statusBarHeight + navigationBarHeight)
navigationBarHeight默认44 (iPhoneX 88)
statusBarHeight可以通过 [[UIApplication sharedApplication] statusBarFrame].size.height 拿到(除iPhoneX都是20   iPhoneX是44)


但我不知道 tabbar真实高度是 ? + ? 怎么办

举报 使用道具

回复
chcars  新手上路  发表于 2019-3-7 14:03:43  | 显示全部楼层
木有大佬知道么

举报 使用道具

回复
jinniuzhenniu  新手上路  发表于 2019-3-7 14:26:00  | 显示全部楼层
老铁解决了没啊?怎么解决的?

举报 使用道具

回复
xyz6118  新手上路  发表于 2019-3-7 14:49:04  | 显示全部楼层
没人知道吗

举报 使用道具

回复
kuye1234  新手上路  发表于 2019-3-7 16:00:42  | 显示全部楼层
CGRect r1 = [self.navigationController.navigationBar frame];
    CGRect r2 = [self.tabBarController.tabBar frame];

举报 使用道具

回复
xiaoknife007  新手上路  发表于 2019-3-7 17:39:54  | 显示全部楼层
可能没办法再viewDidAppear之前拿到了

现在找到的方法是通过 self.view.safeAreaInsets (ios11 新增)里面拿到 然后didAppear时重绘一下

暂时不知道会不会影响体验


下面照抄自别的文章:
iOS 11 设备上运行出现最多问题应该就是 tableView 莫名奇妙地偏移了 20pt 或者 64pt。原因是 iOS 11 弃用了 automaticallyAdjustsScrollViewInsets 属性,取而代之的是 UIScrollView 新增了 contentInsetAdjustmentBehavior 属性,这一切的罪魁祸首都是新引入的 Safe Area。

Safe Area 帮助我们将 view 放置在整个屏幕的可视的部分。即使把 navigationBar 设置为透明,系统也认为安全区域是从 navigationBar 的 bottom 开始的。

安全区域定义了 view 中可视区域的部分,保证不被系统的状态栏、或父视图提供的 view 如导航栏覆盖。可以使用 additionalSafeAreaInsets 去扩展安全区域。每个 view 都可以改变安全区域嵌入的大小,controller 也可以。

safeAreaInsets 属性反映了一个 view 距离该 view 的安全区域的边距。对于一个 controller 的 rootView 而言,safeAreaInsets 值包括了被 statusBar 和其他可视的bars 覆盖的区域和其他通过 additionalSafeAreaInsets 自定义的 insets 值。对于 view 层次中的其他 view,safeAreaInsets 值反映了 view 被覆盖的部分。如果一个 view 全部在它父视图的安全区域内,则 safeAreaInsets 值为(0,0,0,0)。


出自:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
小Y  新手上路  发表于 2019-3-7 19:37:47  | 显示全部楼层
自定义UIToolbar

- (void)layoutSubviews {
    [super layoutSubviews];
    NSArray *subViewArray = [self subviews];
   
    for (id view in subViewArray) {
        if ([view isKindOfClass:(NSClassFromString(@"_UIToolbarContentView"))]) {
            UIView *testView = view;
            testView.userInteractionEnabled = NO;
        }
    }
   
}


?在控制器里这样用
PingLun *toolbar = [[PingLun alloc] initWithFrame:CGRectZero];
    toolbar.backgroundColor = COLOR(245.0, 245.0, 245.0, 1);
    [self.view addSubview:toolbar];
    toolbar.translatesAutoresizingMaskIntoConstraints = NO;
    if (@available(iOS 11.0, *)) {
        NSLayoutConstraint *bottom = [toolbar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor];
        NSLayoutConstraint *height = [toolbar.heightAnchor constraintEqualToConstant:48];
        NSLayoutConstraint *left = [toolbar.leftAnchor constraintEqualToAnchor:self.view.leftAnchor];
        NSLayoutConstraint *right = [toolbar.rightAnchor constraintEqualToAnchor:self.view.rightAnchor];
        [NSLayoutConstraint activateConstraints:@[bottom, height, left, right]];
    }else{
        if (@available(iOS 9.0, *)) {
            NSLayoutConstraint *bottom = [toolbar.bottomAnchor constraintEqualToAnchor:self.bottomLayoutGuide.topAnchor];
            NSLayoutConstraint *height = [toolbar.heightAnchor constraintEqualToConstant:48];
            NSLayoutConstraint *left = [toolbar.leftAnchor constraintEqualToAnchor:self.view.leftAnchor];
            NSLayoutConstraint *right = [toolbar.rightAnchor constraintEqualToAnchor:self.view.rightAnchor];
            [NSLayoutConstraint activateConstraints:@[bottom, height, left, right]];
        } else {
            
        }
    }

然后在toolbar添加控件(button等)

举报 使用道具

回复
fantasy12341234  新手上路  发表于 2019-3-7 19:40:13  | 显示全部楼层


我用的方法比较 low   但是我感觉蛮好用的   
方法不是那种很优雅的    但是我感觉比较适合我自己
可以分享一下

写一个基类   

BaseVIewController : UIViewController


BaseVIewController  有2个属性

navBarHeight
tabBarHeight

tabBarHeight 的 getter 方法是写死的判断  返回    49 / 83
navBarHeight 也对应

其他控制器继承自     BaseVIewController

需要适配   顶部  底部 的地方    直接   self.tabBarHeight    self.navBarHeight

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
guaigaui51  新手上路  发表于 2019-3-7 19:48:19  | 显示全部楼层
我也是这样用的,还可以,挺好的

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

搜索
热搜: iOS swift 下拉刷新
  • 版块推荐
  • 百宝箱

图文热点

更多

精华推荐

更多

社区学堂

更多

客服中心

关于我们
关于我们
友情链接
联系我们
帮助中心
精贴推荐
源码上传
注册登录
服务支持
资源下载
关注我们
官方微博
官方空间
快速回复 返回顶部 返回列表