如何使用自动布局使 UILabel 在屏幕中水平和垂直居中?

2024-06-28

我已经使用自动布局几天了,我试图将 UILabel 在屏幕中垂直和水平居中,但我在使标签居中方面运气不佳。

我希望实现如下所示的目标,

  ---------------
 |               |
 |               |
 |               |
 |               |
 |    Label      |
 |               |
 |               |
 |               |
 |               |
 | SIGNIN   REG  |
  ---------------

我向 UILabel 添加了以下约束,

NSLayoutConstraint *myLabelConstraintHeight = [NSLayoutConstraint constraintWithItem:myLabel
                                                                          attribute:NSLayoutAttributeHeight
                                                                          relatedBy:NSLayoutRelationEqual toItem:nil
                                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                                         multiplier:1.0f
                                                                           constant:100];

            [myLabel addConstraint:myLabelConstraintHeight];


            NSLayoutConstraint *myLabelConstraintWidth = [NSLayoutConstraint constraintWithItem:myLabel
                                                                                      attribute:NSLayoutAttributeWidth
                                                                                      relatedBy:NSLayoutRelationEqual toItem:nil
                                                                                      attribute:NSLayoutAttributeNotAnAttribute
                                                                                     multiplier:1.0f
                                                                                       constant:100];
            [myLabel addConstraint:myLabelConstraintWidth];

NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:label
                                                           attribute:NSLayoutAttributeCenterX
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:label.superview
                                                           attribute:NSLayoutAttributeCenterX
                                                          multiplier:1.0
                                                            constant:0.0];
NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:label
                                                           attribute:NSLayoutAttributeCenterY
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:label.superview
                                                           attribute:NSLayoutAttributeCenterY
                                                          multiplier:1.0
                                                            constant:0.0];

// No longer using [label addConstraints:@[centerX, centerY];
[NSLayoutConstraint activateConstraints:@[centerX, centerY]];

更新:苹果现在希望你使用[NSLayoutConstraint activateConstraints:] and [NSLayoutConstraint deactivateConstraints:]而不是使用[UIView addConstraint:] and [UIView removeConstraint:].

2017 年 8 月 24 日更新:

可以使用布局锚点来完成此操作的更简单版本:

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

如何使用自动布局使 UILabel 在屏幕中水平和垂直居中? 的相关文章

随机推荐

  • 如何在 django-admin 中显示外键的选择?

    我有与 django admin 面板相关的小问题 我有 2 个型号 from django db import models class Subject models Model subject models CharField max
  • 使用 JHipster 进行生产构建时找不到图像

    当我尝试在我的产品中部署应用程序时 WAR 不会 有图像目录 所以我可以在没有任何内容的情况下部署我的应用程序 图片 可能是什么问题呢 看起来问题的原因是 gulp imagemin 解决方法是删除此行 pipe imagemin opti
  • 使用 gcc 插件插入全局变量声明

    我想知道是否可以使用 gcc 插件插入全局变量声明 例如 如果我有以下代码 test c int main void return 0 我想把它变成 int fake var int main void return 0 那可能吗 如果可以
  • 安装驱动时出错

    我创建了一个 EC2 亚马逊实例 ubuntu 并从可用快照创建了一个卷 该卷已成功附加到我的实例 dev sdf 我执行了以下命令 执行 mkdir space 当我尝试执行以下命令时 sudo mount dev sdf1 space
  • Ember.js - 创建多步骤向导 - 如何?

    我需要创建一个包含多个步骤的向导 每个步骤将显示一个带有选项的表单 并且根据用户的选择 向导应该转到某个步骤 并将用户首选项 选择 存储在某个位置 这些首选项不会保存在模型中 它们仅与模型创建步骤相关 为了提供一些背景信息 其目标是 向用户
  • 无法重命名 Eclipse 插件(无法解析插件)

    我正在开发一个 eclipse 插件 在一些营销人员妨碍之后 我需要重命名我的插件 所以我继续在 eclipse 中打开plugin xml 并在概述选项卡中更改名称和ID 然后 当我尝试启动 Eclipse 以查看一切正常运行时 它会转储
  • 如何在 PHP 中获取 AWS EC2 实例 ID

    我在 AWS EC2 中有 2 个实例 我想通过实例 id 检查请求 require once vendor autoload php use Aws Ec2 Ec2Client use Aws Rds RdsClient instance
  • Mongoose 填充与对象嵌套

    使用之间是否有任何性能差异 查询的处理时间 猫鼬种群 http mongoosejs com docs populate html和直接对象包含 每种应该什么时候使用 猫鼬种群示例 var personSchema Schema id Nu
  • 对通过 VBA 导入/链接的表禁用安全警告

    如何阻止通过导入表弹出此窗口DoCmd TransferSpreadsheet 我正在导入相当多的表 因此必须在弹出窗口中为每个表单击 打开 这很烦人 我试过了DoCmd SetWarnings False但这似乎不起作用 我知道也可以设置
  • 如何创建针对不同渠道不同的数据库序列?

    我们有一个要求 即需要为不同的渠道维护不同的数据库序列 例如 ABC SQN1 XYZ 1 序列号需要根据通道递增 有没有办法我们可以实现它 Thanks 你的问题不清楚 请更详细地描述要求 我知道你想要一些序列并有条件地增加它们 这样 c
  • 在 AngularJS 中单击按钮打开一个新选项卡

  • 高效的switch语句

    在以下两个版本的 switch case 中 我想知道哪个版本是高效的 1 string convertToString int i switch i case 1 return new string one case 2 return n
  • 如何确定选择哪个数据库

    有没有办法稍后输出当前选择的数据库的名称 只需使用 mysql query 或 mysqli query 甚至更好 或者最好使用 PDO SELECT DATABASE 附录 对于是否可以进行很多讨论FROM DUAL是否应包含在其中 在技
  • django modelformset_factory - 管理表单数据丢失

    我仍在与表单集作斗争 我无法真正理解为什么会出现此错误 u ManagementForm 数据丢失或已被篡改 那是我的代码 请指出我的错误并帮助我解决这个问题 csrf protect transaction commit on succe
  • 如何理解rrdtool数据库中的主数据点(PDP)?

    如果我将 RRD 转储为 XML 那么在 PDP Status 部分下会出现三个元素
  • Kubeflow管道创建容器失败

    我正在本地计算机中运行 Kubeflow 并使用 multipass 进行部署这些步骤 https yann leguilly gitlab io post 2020 03 04 kubeflow on laptop 但是当我尝试运行管道时
  • 如何在GDB Python脚本中循环C/C++程序的所有函数来实现rbreak?

    我想实施rbreak来自 Python 脚本 最简单的方法是循环所有函数 并将它们的名称与 Python 中的正则表达式进行比较 或者如果有更好的方法而无需显式循环 我也很感兴趣 我希望该解决方案使用一些 API 例如 https sour
  • NSBatchDeleteRequest 不删除关系

    我有一个问题NSBatchDeleteRequest似乎无法删除关系引用 我有两个实体 News 类别 其中一个类别可以有多个新闻 现在 当我尝试使用删除核心数据中的所有对象时NSBatchDeleteRequest使用以下代码 然后查看s
  • 如何获取按钮单击时的计数计时器的值?

  • 如何使用自动布局使 UILabel 在屏幕中水平和垂直居中?

    我已经使用自动布局几天了 我试图将 UILabel 在屏幕中垂直和水平居中 但我在使标签居中方面运气不佳 我希望实现如下所示的目标 Label SIGNIN REG 我向 UILabel 添加了以下约束 NSLayoutConstraint