iOS | 图片上的文字自适应

背景

公司产品需要自定义弹窗。而弹窗的背景图片是根据屏幕的宽高自动缩放的,如下:

#define ALERTVIEW_HEIGHT ([UIScreen mainScreen].bounds.size.width - 60)*1.05
#define ALERTVIEW_WIDTH  [UIScreen mainScreen].bounds.size.width-60

而弹窗上的标题,即‘恭喜’两个字并不是图片,是写上去的,代码如下:

UILabel *titleLab = [[UILabel alloc]initWithFrame:CGRectMake(10, 38, self.alertView.frame.size.width - MARGIN, 30)];

这里我给了它距离弹框顶部一个固定的间距,iPhone 6s 模拟器上效果如下:
@iPhone6s-fixed| center | 75x133.4

以下是iPhone 11 模拟器下的效果:iPhone11-fixed

简单点说,iPhone11下字体上移了。这个固定的尺寸不随屏幕的宽高呈现比例变化,那我们如何定义它的高度,以便标题在不同屏幕尺寸下都在中间位置呢。

实现动态高度

此时我们引入一个计算动态高度的宏定义:

#define getHeight(h) ((h)*([UIScreen mainScreen].bounds.size.width/414.0f))

在iPhone 11上调试一个合适的高度,这里不再是固定高度,而是使用了刚刚定义的宏动态高度getHeight(40)

 UILabel *titleLab = [[UILabel alloc]initWithFrame:CGRectMake(10, getHeight(40), self.alertView.frame.size.width - MARGIN, 30)];

效果如下:
iPhone11-adaptivity

然后我们在切换回iPhone 6s 模拟器下:
iPhone6s-adaptivity

大体一致了,类似的实现还可以定义宽度和字体:

#define gotWidth(w) ((w)*([UIScreen mainScreen].bounds.size.height/896.0f))
#define fontHeight(f) ((f)*([UIScreen mainScreen].bounds.size.width/414.0f))

http://www.niftyadmin.cn/n/1035725.html

相关文章

基础 | 1-1 算法在计算中的角色

什么是算法 通俗来说,算法是任何定义良好的计算过程,包含了一些输入值input,和一些输出值ouput,算法是描述输入与输出关系的计算过程的实现。 为什么算法是值得学习的 这需要从算法能解决什么问题说起,算法的应用无所不在&…

【libusb】 一.安装

1.libusb 下载 https://libusb.info/ 2.安装 步骤: 1、环境 Ubuntu 16.04 2、安装主要分3个步骤,如下: a:执行./configure来配置安装包。b:执行make编译该安装包。c:执行make install安装3.具体执行步骤: (1&#…

JNI 学习 一

知识点整理一.JNI原理1.1JNI原理:1.1.1 JavaVM1.1.2 JNIEnv1.1.3 参数 jobject jclass1.1.3 jfieldId, jmethodID1.1.4 Java和C/C 中的基本类型的映射关系:1.1.5 java层签名生成方式:2.JNI 动态注册(常用)与静态注册2.1 静态注册(…

iOS | 模拟器调试Web控制台空白问题及解决

配置环境 macOS:macOS Catalina 10.15.7 Safari:15.0 Xcode:12.4 Simulator iOS 14.4 问题 使用模拟器打开Web页面后,发现Safari控制台一片空白,如下: 解决 查了一下原因,发现下载Safari Tec…

web-project-platform.js-not-found

Web Project Set Up | Platform.js 无法下载 构建环境: macOS 10.15.7 vs code 1.60.2 报错:PhantomJS not found on PATH 下载时会提示:saving to …/var/folders/…/ phantomjs-2.1.1-macosx.zip 重点是:var/folders这个文件在哪…

9.【Windows】如何制作原版Win10系统盘

1.win10工具下载 首先需要准备一个8G或以上的U盘,里面的文件自行备份好,因为安装系统的时候会格式化U盘。 官网下载 下载 MediaCreationTool20H2工具 下载完成 2 制作原版启动盘 以管理员身份运行 点击接受 选择“为另一台电脑…” 默认点击下一步…

Swift 5.6 学习之旅

基本语法 print("Hello,world")Note 声明的结尾不需要写分号 简单值 字段含义外延用例let定义一个常量constant在编译时不需要被知道但必须精确的赋值一次一次定义多次使用let myConstant 42var定义一个变量variablevar myVariable 10myVarible 20 Type Infer: …