垂直居中 UILabel 时忽略上升和下降?

2023-11-21

我使用自动布局将一些标签放置在单元格的垂直中心。文本全部大写,但UILabel有问题时,即使sizeToFit应用后,会在文本下方留下空格,这看起来很像小写 y、p 和 q 等字母的尾部。由于我垂直居中,这会导致偏移,意味着文本显示比应有的高几个像素。

另一个问题可能是:我是否可以让字体根据其是否包含任何使用上升或下降的字符来智能地调整其垂直中心?

例如,字符串“abbaba”不需要下降部分,而字符串“oyyoyo”则不需要上升部分。全大写的字符串也永远不需要下行字母。如果我垂直居中“oyyoyoyo”,它会显得太低。

enter image description here


Thanks, Abhinit,为您解答。

我也在寻找这个,所以我想在这里发布您需要应用的确切约束来根据您的喜好对齐文本。

这张图片来自维基百科显示字体的不同大小部分。

enter image description here

因此,对齐标签的方法有很多种,具体取决于您是否想要对齐上升高度、大写高度、x 高度、基线或下降高度。

假设你有一个label包含像“HELLO”这样的大写文本并且您想要与其对齐viewAbove限制高度并与viewBelow到基线。

你会这样做:

let font = label.font
let ascenderDelta = font.ascender - font.capHeight

LayoutHelper()
    .addViews([
        "label":label, "viewAbove":viewAbove, "viewBelow":viewBelow
    ])
    .withMetrics(["ascenderDelta":ascenderDelta])
    .addConstraints([

        // -- Here the constraints to align to cap height --
        "X:label.top == viewAbove.bottom - ascenderDelta",
        "X:label.baseline == viewBelow.top",

        ...other constraints...
    ])

注意:在示例中我使用的是我的实用程序类布局助手,但我希望这个想法是清楚的。

关于“自动对齐”标签:

我会考虑制作一个“智能”标签,根据它是否包含下降部分、上升部分、大写字母等来调整到适当的行。

您可以使用负插入来做到这一点drawTextInRect(like here但是,例如,使用insets = {-ascenderDelta, 0, font.descender, 0})。但这会裁剪任何上升/下降部分,以防万一。我更喜欢与大写字母对齐而不裁剪任何可能的上升部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

垂直居中 UILabel 时忽略上升和下降? 的相关文章

随机推荐

  • MP4 正在下载而不是播放

    MP4 文件有时会被下载 有时会在浏览器中播放 这两个链接有什么区别 1 如果您在 Chrome 中打开此 URL 将下载视频 http video video mall com video mall 400241188377 video
  • Angular 2 获取div的宽度

    我看过很多帖子 但没有一个完全符合我的要求 我有一个超出页面宽度的表格 由于各种原因我需要获取它的宽度 I used ViewChild tableToMeasure elementView ElementRef 然后将 tableToMe
  • 如何化简分数?

    如何在 C 中化简分数 例如 给定1 11 6 我需要它简化为2 5 6 如果你想要的只是将你的分数变成一个带分数 其小数部分是像前面假设的答案一样的真分数 你只需要添加numerator denominator到数字的整个部分并将分子设置
  • 如何使用 python nltk 加速 stanford NER 的 NE 识别

    首先 我将文件内容标记为句子 然后对每个句子调用斯坦福 NER 但这个过程确实很慢 我知道如果我在整个文件内容上调用它会更快 但是我在每个句子上调用它 因为我想在 NE 识别之前和之后索引每个句子 st NERTagger stanford
  • 我可以更改 UISearchBar 清除按钮的颜色/图像吗?

    我想将清除按钮颜色更改为白色 我尝试了很多方法但没有运气 我还参考了以下内容link 但这对我不起作用 请找到我尝试过的以下代码 我正在开发最新的 ios 11 感谢任何帮助 class SearchBar UISearchBar over
  • 如何解析气流模板中的json字符串

    是否可以在气流模板中解析 JSON 字符串 我有一个 HttpSensor 它通过 REST API 监视作业 但作业 ID 位于上游任务的响应中 该任务具有xcom push marked True 我想做类似下面的事情 但是 这段代码给
  • 有时 console.log 在 log-ios 中显示,有时则不显示

    我跑了react native start在一个终端中 然后react native ios run在另一个 我的初始console log很少表现出来 但有时会表现出来 很多时候 我随机地看到 超出日志消息配额 此进程中的一些消息已被丢弃
  • 如何从监控摄像头录制的视频中读取时间?

    我有一个问题 我必须从监控摄像头录制的视频中读取录制时间 时间显示在视频的左上角区域 下面是显示时间的区域屏幕截图的链接 此外 数字颜色 白色 黑色 在视频播放期间不断变化 http i55 tinypic com 2j5gca8 png
  • 更新 .dbml 文件

    在数据库中进行一些更改后如何更新 dbml 文件 进行更改后没有内置方法可以将 dbml 文件 数据上下文与数据库同步 除了通过删除所有或部分实体并重新拖动它们来重新生成整个 dbml 文件之外 或者按照其他回复的建议使用 sqlmetal
  • Python - 找到最近的时间戳

    我有一个 Python 日期时间时间戳和一个大字典 索引 其中键是时间戳 值是我感兴趣的其他一些信息 我需要尽可能高效地找到索引中最接近时间戳的日期时间 键 目前我正在做类似的事情 for timestamp in timestamps c
  • .net MAUI 背景 vs 背景颜色 - 有什么区别?

    使用 Visual Studio Community Edition 2022 构建 Net MAUI 项目 我尝试搜索官方文档 但没有找到答案 有人可以解释以下内容吗 问题 有什么区别Background and BackgroundCo
  • SQL表连接中ON和WHERE子句的区别

    select e last name e hire date from employees e join employees m on m last name Davies and e hire date gt m hire date se
  • ActionFilterAttribute ninject 注入 - DbContext 已被处置

    我的项目使用通常的存储库模式以及服务和工作单元 所有这些都使用 Ninject 从 NinjectModule 注入依赖项 但我正在尝试从ActionFilterAttribute在我显示的页面布局中注入一些信息 来自数据库 这样我就不需要
  • 使用 JavascriptExecutor 的 Selenium Datepicker

    请告知是否接受使用 Selenium 的取货日期这种方法 WebDriver driver new ChromeDriver driver manage window maximize driver get https www spicej
  • 熊猫的重采样从几个月到几周

    我正在尝试将每月数据下采样为每周数据 并拥有如下所示的月份时间序列数据框 qty PERIOD NAME 2017 09 01 49842 0 2017 10 01 27275 0 2017 11 01 29159 0 2017 12 01
  • 在 Asio 中异步等待,直到套接字可用于读/写

    我想用 Boost Asio 执行以下操作 我有一个套接字 我想注册一个回调 当数据可用于在套接字上读取 写入时调用 但我不希望它实际执行读取 写入操作 基本上 我需要的类似于async read some async write some
  • 尝试在地图函数中添加字段时出现“对象不可扩展”错误

    我尝试使用地图向数组中的项目添加新字段 const newArray oldArray map item gt return item newField Something 我已经尝试过 const newArray oldArray ma
  • Maven:Surefire——干运行?

    有什么办法可以保证干运行吗 会列出哪些测试的东西would运行 而不运行它们 目标是了解在特定配置下哪些测试将在 JBoss AS7 测试套件中运行 Janinko 进行了更改 位于https github com janinko mave
  • Command.ExecuteScalar 始终返回 null,而 Management Studio 中的存储过程运行良好

    我有以下 SQL 存储过程 其中包含一个输入参数和一个输出参数 CREATE PROCEDURE dbo spCanUserEdit username nvarchar 255 AS BEGIN SET NOCOUNT ON DECLARE
  • 垂直居中 UILabel 时忽略上升和下降?

    我使用自动布局将一些标签放置在单元格的垂直中心 文本全部大写 但UILabel有问题时 即使sizeToFit应用后 会在文本下方留下空格 这看起来很像小写 y p 和 q 等字母的尾部 由于我垂直居中 这会导致偏移 意味着文本显示比应有的