如果我有一个使用自动布局的UIButton,它的大小可以很好地调整以适应它的内容.

如果我将图像设置为button.image,那么本质大小似乎再次说明了这一点.

但是,如果我调整按钮的titleEdgeInsets,布局不会考虑这一点,而是会截断按钮标题.

我如何才能确保按钮的固有宽度占插图的比例?

在此处输入图像描述

编辑:

我正在使用以下内容:

[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];

目标是在图像和文本之间添加一些分隔.

推荐答案

您无需覆盖任何方法或设置任意宽度约束即可解决此问题.您可以在Interface Builder中完成所有操作,如下所示.

  • 固有按钮宽度是从标题宽度加上图标宽度加上左和右content个边缘插入物得出的.

  • 如果按钮同时具有图像和文本,则它们作为一个组居中,中间没有填充.

  • 如果添加左边的内容插页,它是相对于文本计算的,而不是相对于文本+图标计算的.

  • 如果将左侧图像设置为负插页,则图像将向左拉出,但整体按钮宽度不受影响.

  • 如果设置为负的左侧图像插图,则实际布局将使用该值的一半.因此,要获得-20磅的左插入值,必须在Interface Builder中使用-40磅的左插入值.

因此,您提供了足够大的左侧内容插页,以便为所需的左侧插页and(图标和文本之间的内部填充)创建空间,然后通过将图标和文本之间的填充量加倍来向左移动图标.结果是一个左右内容插页相等的按钮,以及一个文本和图标对,它们作为一个组居中,它们之间有特定的填充量.

一些示例值:

// Produces a button with the layout:
// |-20-icon-10-text-20-|
// AutoLayout intrinsic width works as you'd desire.
button.contentEdgeInsets = UIEdgeInsetsMake(10, 30, 10, 20)
button.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0)

Ios相关问答推荐

SwiftUI中ForEach和@ State数组的可能并发问题

带有RadStudio 11.3/12的Mac Mini M2(Sonoma 14.2.1)上的PAServer-测试连接按钮有效,但部署不起作用

在滚动视图中固定页眉,但在页眉上方嵌入元素

如何将 Info.plist 文件添加到 Xcode for admob,错误 添加后会产生多个命令

垂直分页 UIScrollView 高度不正确

创建 Flutter 项目时,如何从我的系统中删除特定的开发者身份?

拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止

iOS 16 中的状态栏 colored颜色

SwiftUI 菜单中的内联水平按钮

UIView 倒置旋转时的zoom 问题

一对多关系 Firebase 实时数据库(嵌入数百万条 comments )

VStack 显示错误实例方法 'sheet(item:onDismiss:content:)' 要求 'Int' 符合 'Identifiable'

iOS 8 - 使用自定义演示关闭视图控制器后屏幕空白

NSURLConnection 的 Xcode 4 警告未使用表达式结果

在主线程上发布 NSNotification

用 PC 调试 ipad safari

在 iOS 7 上更改标签栏色调 colored颜色

UIButton 事件.有什么不同?

呈现和关闭模态视图控制器

从 UIScrollview 中删除内容和框架布局指南