多行 UIButton 和自动布局

2024-03-29

我创建了一个视图控制器,如下所示:

我希望两个顶部按钮与整个视图的左/右边缘之间始终保持 20 个点。它们也应该始终具有相同的宽度。我已经为所有这一切创建了约束,并且它完全按照我想要的方式工作。问题是垂直限制。按钮应始终位于顶部边缘下方 20 点处。它们应该具有相同的高度。但是,自动布局不考虑左侧标签需要两行来容纳其所有文本,因此结果如下所示:

我希望它看起来像第一张图片中的那样。我无法为按钮添加恒定的高度限制,因为当应用程序在 iPad 上运行时,只需要一行,那么额外的空间就会很浪费。

In viewDidLoad我试过这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.leftButton.titleLabel.preferredMaxLayoutWidth = (self.view.frame.size.width - 20.0 * 3) / 2.0;
    self.rightButton.titleLabel.preferredMaxLayoutWidth = (self.view.frame.size.width - 20.0 * 3) / 2.0;
}

但这根本没有改变任何事情。

问题:如何使自动布局尊重左侧按钮需要两行?


我遇到了同样的问题,我希望我的按钮与其标题一起增长。我不得不子类化UIButton和它的intrinsicContentSize以便它返回标签的固有大小。

- (CGSize)intrinsicContentSize
{
    return self.titleLabel.intrinsicContentSize;
}

自从UILabel是多行的,其intrinsicContentSize未知,您必须设置它preferredMaxLayoutWidth 请参阅 objc.io 相关文章 https://www.objc.io/issues/3-views/advanced-auto-layout-toolbox/#intrinsic-content-size-of-multi-line-text

- (void)layoutSubviews
{
    [super layoutSubviews];
    self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
    [super layoutSubviews];
}

布局的其余部分应该可以工作。如果您将两个按钮设置为相同的高度,则另一个按钮将增长到。完整的按钮看起来像这样

@implementation TAButton

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        self.titleLabel.numberOfLines = 0;
        self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
    }
    return self;
}

- (CGSize)intrinsicContentSize
{
    return self.titleLabel.intrinsicContentSize;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
    [super layoutSubviews];
}

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

多行 UIButton 和自动布局 的相关文章

  • 在 Swift 4 IOS 中将 XML 数据获取到 String 中

    我有一个 XML 字符串格式 我想使用 Swift 4 从它获取单个值到字符串变量 我的数据如下 let myString Adasdnajinasdshabjdbaiusd Encrypted Text Sample let MyResu
  • 分段表单上传和 NSURLSession.uploadTaskWithRequest 之间的区别

    来自网络编程领域 我非常喜欢使用多部分表单请求来上传文件 然而 在iOS中 我们有一个东西叫做NSURLSession用方法uploadTaskWithRequest 这似乎是调用进行图像上传等操作的方法 您能解释一下这两种方法之间的区别吗
  • Xcode 7.1 在归档 swift ios 应用程序时挂起

    Xcode 7 1 在归档应用程序时 挂在 复制 Swift 标准库 处 知道为什么吗 对于面临同样问题的其他人 在尝试了其他所有方法并失败后 通过重新启动 mac 来修复它 D
  • 在 iPhone 6 和 6 plus 中设置背景图像和图标图像

    如何区分 iPhone 5 和 iPhone 6 和 6 Plus 不同分辨率下的背景图像和图标图像 您必须在图像目录中启用 iOS 8 尺寸 它们在现有项目中默认关闭
  • 如何使用 UIImagePickerController CropRect

    我刚刚找到了一种方法来更改裁剪框的矩形 该裁剪框在捕获图像后出现UIImagePickerViewController 这可以在以下帮助下完成UIImagePickerControllerCropRect 但我不知道如何使用它 最初的裁剪框
  • iOS - 使用隐藏字幕的 AVPlayer

    我正在 iOS 上使用 AVPlayer 来使用 closeCaptionDisplayEnabled 属性 显示电影上的字幕或副标题 hls 或 mp4 但标题不显示任何内容 我不知道为什么 您有什么解决方案可以在电影 hls mp4 上
  • XCode 7 上的 libswiftSecurity.dylib “没有这样的文件或目录 (2)”

    我正在尝试构建一个在 XCode 6 上运行正常的项目 但出现错误 Applications Xcode beta app Contents Developer Toolchains XcodeDefault xctoolchain usr
  • Semaphore.wait(timeout: .now()) 的目的是什么?

    看了一些苹果代码示例 我发现了这一点 func metadataOutput output AVCaptureMetadataOutput didOutput metadataObjects AVMetadataObject from co
  • 在数组中查找距用户位置最近的经度和纬度

    我有一个充满经度和纬度的数组 我的用户位置有两个双变量 我想根据我的阵列测试用户位置之间的距离 看看哪个位置最近 我该怎么做呢 这将得到两个位置之间的距离 但很难理解 我如何针对一系列位置对其进行测试 CLLocation startLoc
  • 金属顶点着色器绘制纹理的点

    我想执行 Metal 或 OpenGLES 3 0 着色器 通过混合绘制点基元 为此 我需要将纹理的所有像素坐标作为顶点传递给顶点着色器 该顶点计算要传递给片段着色器的顶点的位置 片段着色器仅输出启用混合的点的颜色 我的问题是 是否有一种有
  • 通过 URL 中的 ID 进行 RestKit 关系映射

    假设我有一个 APIusers 1 items返回一个列表items为了userID 为 1 假设API响应如下 items id 1 description Some item 请注意 响应不包含user id用于关系映射 RestKit
  • iOS 11 文件提供程序扩展中的项目

    我有一个带有文件提供程序扩展名的应用程序 我尝试使用此方法为 ios 11 的新文件应用程序提供支持link https developer apple com documentation fileprovider content and
  • 如何在 UIBarButtonItem 上触发高亮效果

    当您点击UIBarButtonItem in a UIToolbar 有白光效果 是否有可能触发一个事件来显示这种效果 我不想按按钮 只应显示效果 我想向用户展示该按钮后面有新内容 感谢您的帮助 这是 highlight png 我不是在开
  • 在 iOS 上的 PhoneGap 或 Cleaver (Cordova) 中加载远程 html

    我在我的本机 iOS 6 应用程序中使用 Cordova 2 4 组件 Cleaver 和嵌入式视图 到目前为止 我已经成功创建了项目结构 链接了 Cordova 库并设置了 Hello World 应用程序 该应用程序确实可以提供 设备就
  • 如何使用 UIImagePickerController 呈现 ViewController

    我试图提出一个ImagePicker 然后在用户选择图像后 呈现图像编辑ViewController用户可以在其中操作图像 然后将编辑后的图像发送回原始图像ViewController 问题 是否有一种标准或最佳实践方法从初始 ViewCo
  • BLE:使用 Android / iOS 读取长特征值

    对于正常的特征读取 仅读取 MTU 大小 20 字节 的数据 我的客户将提供更大尺寸 超过 100 字节 的特征 我看到 BLE 提供了 长读取 功能 可以读取直到达到特征的大小 https bluegiga zendesk com ent
  • 如何在WebView中隐藏滚动条?

    我切换到WKWebView因为UIWeb视图Apple 不再建议使用 使用以下代码从 WebView 中的容器加载 HTML 文件 let webview myWKWebViewClass webview for Bundle main f
  • 在 iOS 8 中呈现相机权限对话框

    当我的应用程序在 iOS 8 上第一次尝试访问摄像头时 会向用户显示一个摄像头权限对话框 很像 iOS 7 中用于访问麦克风的麦克风对话框 在 iOS 7 中 可以预先调用麦克风权限对话框并查看是否授予了权限 请参阅这个问题 https s
  • 需要帮助设置两个宽度相等的并排自动布局按钮

    使用自动布局我尝试在底部创建两个按钮 如下所示 拖动两个按钮后 我设置这样的约束 On Back button I set Leading Space to Container Margin and Bottom Space to Bott
  • Swift 中的 StrongLoop 环回示例

    我正在尝试在 Swift 中实现示例 LoopBack iOS 应用程序 创建 LoopBack iOS 应用程序 第 1 部分 http docs strongloop com display DOC Creating a LoopBac

随机推荐

  • 最小化时,窗口应用程序在任务栏上呈橙色闪烁

    我有一个窗口应用程序 当我最小化任务栏上的窗口应用程序以在另一个应用程序上工作时 我们有一种工具可以将消息从一个窗口应用程序发送到另一个窗口应用程序 因此 我的第一个 win 应用程序被最小化 现在我打开另一个 win 应用程序 然后向第一
  • C++11 的序列压缩函数?

    使用新的基于范围的 for 循环 我们可以编写如下代码 for auto x Y IMO 是哪个huge改进自 例如 for std vector
  • Websphere 8.5 Web 服务未部署

    我很难让 Web 服务在 Websphere 上运行 我有一个 ejb jar 它使用 JAXWS 注释 WebService 定义了 Web 服务 然后将该 ejb jar 打包到耳朵中 我已成功将 Ear 部署到 Glassfish 上
  • 是否可以将 javascript 嵌入到 SSRS 报告中?

    SQL Server 报表可以嵌入 vbscript 并在客户端执行 但是使用 javascript 也可以完成同样的操作吗 我认为能够在客户端执行 jQuery 和 CSS 操作来创建更具交互性的深入体验将是非常有用的 在我看来 Repo
  • 选择 Node.js 上 Bookshelf、MySQL、Knex 在两个日期之间创建的对象

    我需要获取两次之间创建的对象的列表 我能够通过编写 SQL 查询来获取数据 但我需要通过 Bookshelf 编写这个查询 我的简单查询 router route locations fetch all locations get func
  • UINavigationController 内的 viewController 是否可以有不同的方向?

    我希望所有视图控制器仅支持纵向模式 除了一个视图控制器 我们将其称为 横向支持 ViewController 它也应该支持横向模式 问题是 当我在横向模式下处于 LandscapeSupportViewController 中 然后推送一个
  • 如何在 wpf c# Visual Studio 中使用标签或文本块的单击事件?

    我正在开发桌面应用程序 我收到建议使用 wpf 而不是 winforms 当我单击标签时 我想转到另一个表单 窗口 但找不到标签和文本块的单击事件 谁能告诉我鼠标左键按下事件的用途是什么 谁能告诉我鼠标左键按下事件的用途是什么 例如 它可以
  • 例如,当编组到 XML 时,我是否可以强制 JAXB 不将“转换为”?

    我有一个使用 JAXB 编组为 XML 的对象 一个元素包含一个包含引号 的字符串 生成的 XML 具有 quot 存在的地方 尽管这通常是首选 但我需要我的输出匹配legacy系统 如何强制 JAXB 不转换 HTML 实体 感谢您的答复
  • 获取 OpenLayers 中绘制要素的坐标

    我正在尝试使用 OpenLayers 3 创建在线地图 我对使用 OpenLayers 是全新的 我想做的就是获取我在地图上绘制的点 线 多边形的坐标 我知道有一个 featuresadded 参数可用 但我无法正确实现它 有人能给我指明如
  • Firebase 推送通知在 NuxtJS 中停止工作

    我再次在推送通知方面遇到一些麻烦 几周前相同的代码也有效 昨天我无意中发现推送通知不再起作用 我正在做的和写的一样文档 https firebase google com docs cloud messaging js receive 我使
  • 如何使用 Python PPTX 设置图表标题的字体大小?

    我添加了一个图表 doughnutchart data add series YTD COMPLETION TO PLAN PerformancePercent NotPerformedPercent 这为我提供了带有文本的图表标题 但如何
  • 在多台笔记本电脑上运行相同的 Rails 代码并将所有笔记本电脑的数据保存到同一个数据库

    我正在尝试在 localhost 3000 上的多台笔记本电脑上运行相同的 Rails 代码 如何将从不同笔记本电脑提交的数据保存在单个数据库中 或者 他们将共享相同的数据库 如果有人提交了数据 数据将自动存储在其他人的笔记本电脑上 还要考
  • 静态方法内的变量共享

    我对静态方法内的变量有疑问 静态方法内的变量是否共享相同的内存位置 或者它们有单独的内存吗 这是一个例子 public class XYZ Public Static int A int value int b value return b
  • 删除div中的空行

    我有一个标签 pre this is a this is b this is c pre 浏览器解析后输出 this is a this is b this is c 我想要的是 this is a this is b this is c
  • JSF 2.0 无法从 primefaces 渲染对话框

    最近我在使用 primefaces 组件时遇到了很多问题 我不知道为什么 我使用glassfishV3 0 我的primefaces版本是2 2 1 我现在的问题是 当我单击表行时 我无法使 primefaces 的 p dialog 呈现
  • 清除 symfony 2 中日志文件的命令

    我想知道 Symfony 2 中是否有清除日志文件的命令 虽然有php app console cache clear要清除缓存 我不知道任何命令来清除日志文件 logs dev log 和logs prod log 我一直手动清除这些日志
  • 如何在C++中存储1000000位整数

    在我的问题中 我必须保存大整数 例如最多 1000000 位数字 并执行一些操作 我该怎么做 我知道 C 中的 long int 最多可以存储 10 位数字 您可以使用GMP http gmplib org GNU 任意精度库 请注意 这不
  • 如何在 R 中使用范围数据显示离散类别中的频率?

    我正在尝试整理我掌握的有关恐龙及其年龄范围的大量数据 到目前为止 我的数据由一列名称组成 然后是两列过去数百万年的最大和最小日期 如下所示 GENUS ma max ma min ma mid Abydosaurus 109 94 3 10
  • android:等待连接时显示进度对话框

    我试图在启动新活动时添加一个进度对话框 该活动必须等待来自互联网的响应 目前 等待时屏幕会变黑 有谁知道它需要放置在哪里才能工作吗 这个进度对话框 ProgressDialog dialog ProgressDialog show Sear
  • 多行 UIButton 和自动布局

    我创建了一个视图控制器 如下所示 我希望两个顶部按钮与整个视图的左 右边缘之间始终保持 20 个点 它们也应该始终具有相同的宽度 我已经为所有这一切创建了约束 并且它完全按照我想要的方式工作 问题是垂直限制 按钮应始终位于顶部边缘下方 20