RDVTabBarController iPhoneX适配

2023-11-04 03:50

本文主要是介绍RDVTabBarController iPhoneX适配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做新项目然后尝试用 Vue 开发,学新技术学得不亦乐乎。但iPhone X马上可以预购了,数了数手头上的项目,有四个原生的App 需要适配,真的不能再拖了,终于鼓起勇气收拾这个摊子。

适配过程中发现用的RDVTabBarController第三方库是个大问题。
iPhone X模拟器-适配前.png

忽略商品内容吧,但必须解释一下,我们不是一家专门卖卫生巾的公司!!!懒得给页面打码了……

由于四个项目都对RDVTabBarController依赖较深且没有使用cocoapods,而是手动拖拽,里面的文件根据项目需要已经改了一部分,并且忘记改了哪里,所以不考虑换第三方或者重写,直接对RDV进行改动从而适配

确认目标

iPhone X,tabbar高度49pt变成了83pt

我们的目标是什么?
我们的目标是:把tabBar 整体向上移动 34pt!!!
所以初步想法是找到tabBar的父视图,使其父视图高度变成83pt,但是tabBar的高度保持49pt,y=0,这样,底部就留出了34pt的安全距离(后期实现大体相同,细节不同)

分析文件实现

RDV的库目录结构简单
RDV-文件目录.png

看一下.m文件
RDVTabBarController.png

RDVTabBar.png

设置颜色:
绿色 tabBarController.view
黄色 tabBarController.view上的contentView
紫色 tabBar的颜色
蓝色 tabBar上面的backgroundView的颜色

运行后,使用Xcode查看层级,效果如下

view层级图.png

可以看到蓝色view下面有一个相同frame的白色view,这个应该是tabBar,但是紫色没有显示出来,没有细究,可能是颜色设置方法的问题

通过上面的层级图,可以看出,tabBarController上的contentView(黄色)的高度加上tabBar(白色)的高度是整个屏幕的高度,所以,我们需要让contentView(黄色)底部留出83pt,tabBar(白色)的高度变成83pt,然后tabBar上面的backgroundView(蓝色)高度保持49pt,并保持和tabBar的顶部对齐。

具体实现

RDVTabBarController

找到设置contentView的frame的方法

修改前
修改前.png

修改后

void (^block)() = ^{CGSize viewSize = weakSelf.view.bounds.size;CGFloat tabBarStartingY = viewSize.height;CGFloat contentViewHeight = viewSize.height;CGFloat tabBarHeight = CGRectGetHeight([[weakSelf tabBar] frame]);//判断是否是iPhone XBOOL isiPhoneX = ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO);if (!tabBarHeight) {tabBarHeight = isiPhoneX ? 83 : 49;//iPhoneX需要留出83}if (!weakSelf.tabBarHidden) {tabBarStartingY = viewSize.height - tabBarHeight;if (![[weakSelf tabBar] isTranslucent]) {//给tabBar的显示留出足够的高contentViewHeight -= ([[weakSelf tabBar] minimumContentHeight] ?: tabBarHeight);}[[weakSelf tabBar] setHidden:NO];}//设置tabBar的高度[[weakSelf tabBar] setFrame:CGRectMake(0, tabBarStartingY, viewSize.width, tabBarHeight)];[[weakSelf contentView] setFrame:CGRectMake(0, 0, viewSize.width, contentViewHeight)];后面不变......

RDVTabBar
找到设置backgroundView frame的地方

修改前

屏幕快照 2017-10-27 15.01.40.png

此时, frameSize.height = 83pt 所以使用 frameSize.height的地方,一律改成49

修改后

[[self backgroundView] setFrame:CGRectMake(0, 0, frameSize.width, 49)];[self setItemWidth:roundf((frameSize.width - [self contentEdgeInsets].left -[self contentEdgeInsets].right) / [[self items] count])];NSInteger index = 0;// Layout itemsfor (RDVTabBarItem *item in [self items])
{CGFloat itemHeight = [item itemHeight];if (!itemHeight) {itemHeight = 49;}[item setFrame:CGRectMake(self.contentEdgeInsets.left + (index * self.itemWidth),roundf(49 - itemHeight) - self.contentEdgeInsets.top,self.itemWidth, itemHeight - self.contentEdgeInsets.bottom)];[item setNeedsDisplay];index++;
}

view的颜色
根据项目的实际需求给上面提到的四个View设置颜色,tabBar的颜色是透明的,底部安全区的颜色可以通过tabBarController.view设置

完成

iPhone X模拟器-适配后.png

不要吐槽底部空荡荡太丑,说不定人家真机上美美的呢……相信美好的事情总会发生。

注意:最好不要将上面的代码直接粘贴到你的项目中,前文提过,我改过文件并且忘记改了哪里,所以谨慎粘贴。思路已提供,可以试着自己改改。

这篇关于RDVTabBarController iPhoneX适配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343024

相关文章

鸿蒙开发5.0【Picker的受限权限适配方案】

Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。 类型受限权限使用的picker音频ohos.permission.READ_AUDIO,ohos.permission.WRITE_AUDIOAudioViewPicker文件ohos.permission.READ_DOCUMENT,oh

android屏幕适配的问题

这里主要是介绍两种方法:恰巧这两种方法都是出自同一个大神的手笔,当然我这里不做详细的介绍了,大神的博客里面有详细的介绍 1  百分比 洋神的博客:http://blog.csdn.net/lmj623565791/article/details/46767825 github :https://github.com/hongyangAndroid/android-percent-suppor

恋爱相亲交友系统源码原生源码可二次开发APP 小程序 H5,web全适配

直播互动:平台设有专门的直播间,允许房间主人与其他异性用户通过视频连线的方式进行一对一互动。语音视频交流:异性用户可以发起语音或视频通话,以增进了解和交流。群组聊天:用户能够创建群聊,邀请自己关注的异性朋友加入,以便进行多人在线交流。虚拟礼品赠送:平台提供多样化的虚拟礼物,不同礼物有不同的价值,用户可以用来表达好感或支持。私人消息:异性用户之间可以互相发送私人信息,不过平台为了维护用户体验,对

安卓8.0通知栏适配

一、谷歌为什么在安卓8.0对通知栏进行修改         系统通知栏作为除桌面启动图标之外的唯一入口,对app的日活起到非常重要的作用,因此各个app开发商都希望能抢占用户的通知栏。随着移动端的普及和安卓手机存储容量的扩大,用户手机能安装的app数量越来越多,一台手机安装几十到上百个app已经不足为奇,各个app都极尽可能的抢占通知栏,而安卓系统本身又没有一种规范来约束app开发商的这种行为,

安卓8.0桌面图标适配

一、现状及问题          在安卓8.0之前的版本中,原生安装系统 在应用安装到手机后,显示在桌面上的图标只有一种方式来决定, 即在manifest.xml的Application节点中设置 icon标签的属性,这个任何安卓开发者都应该清楚。            上面我们说是在原生安卓系统中的表现,那么在国内就不一定是这样。 拿小米手机来举例,MiUI 8.2 对应 Android 6.

任务栏透明怎么设置?适配最新版 Windows 电脑的方法介绍(图文教程)

电脑任务栏作为Windows操作系统中的一个重要组件,部分用户对于任务栏的了解比较少,经常会遇到任务栏消失、任务栏透明度不会设置的问题。本文一一给大家科普关于Windows任务栏的知识,以及设置任务栏透明的技巧。 一、什么是任务栏 电脑任务栏指的是屏幕下的小长条,由左到右分别包括了:开始、搜索、应用程序区、托盘区、音量、网络设置、输入法、日历等内容组成 主要作用: 1、启动和切换应用程

通知Notification(可展开的大布局)使用,适配android8.0

补充修正: 2018-11-07 问题:Notification PendingIntent失效,每个通知都响应第一个PendingIntent https://blog.csdn.net/u013370255/article/details/83791750 2018-08-16 问题:app版本更新,通知形式显示安装包下载进度 https://blog.csdn.net/u01337025

适配iOS6与iOS7

适配屏幕其实很简单,但为了保持兼容性以及写的代码的通用性,以及最小的改动代码,本人按照如下的一种方式来适配,可以一劳永逸. 1. 先定义几个宏,分辨表示应用可以使用区域的高度,屏幕可用区域的高度,屏幕的宽度 2. 再看看如下图的一些描述 3. 接下来看看适配的代码如何写 #import "RootViewController.h"#define iOS7

猫猫学iOS(四十四)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果: 注意图里面了吗,其实那个效果做起来真的很简单,在iOS中苹果给我们封装的很好,关键是那个按钮 系统的按钮的图片是在左边的,这里我们需要把他调整到右边,然后呢需要我们自己做一下操作。 代码: 话不多说,先

猫猫学iOS之ipad开发qq空间项目横竖屏幕适配

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果图 先看效果 二:结构图 如图所示: 其中用到了UIView+extension分类 Masonry第三方框架做子控制器的适配 NYHomeViewController对应主页也就是全部 NYDock是左边的菜单栏 放置各个选项