在下面的代码中,当使用默认的大动态类型大小时,按钮高度为28.33。当您点击按钮以启用showsActivityIndicator
时,高度意外地增加到34.33。字体大小越小,用户的动态类型大小越大,按钮高度不一致的情况就越明显。
let button = UIButton(configuration: {
var config = UIButton.Configuration.filled()
config.title = "Button"
config.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer {
var container = $0
container.uiKit.font = .preferredFont(forTextStyle: .caption1)
return container
}
return config
}())
button.addAction(UIAction() { _ in
button.configuration?.showsActivityIndicator = true
}, for: .touchUpInside)
字符串
问题似乎是按钮的高度是由内容插入决定的,而这些插入是相对于按钮中最大的内容的。最初按钮中唯一的内容是标题文本,所以它的高度很小,然后添加了活动指示符,它的高度比标题文本大,因此,按钮高度增加,以确保内容插入相对于最高的内容得到尊重。是否有一种方法可以解决这个问题,使按钮高度在其非-加载和加载状态(除了强制固定高度约束)?也许有一种方法可以改变内容插入,使其始终相对于非加载状态下的活动指示器高度?
1条答案
按热度按时间xa9qqrwz1#
有一个选择可能对你有用
Apple的Docs:
一个布尔值,用于确定按钮是否显示活动指示器而不是图像。
"微调器"的默认大小在@2x显示器上为
20.5 x 20.5
,在@3x显示器上为20.333... x 20.333...
。因此,我们可以将清晰的图像设置为该大小,并调整
.contentInsets
,以便在活动指示器不显示时标题水平居中。就像这样:
字符串
似乎没有任何属性可以设置为给予您所需的控件.
你可以使用上面的代码(清晰的图像),并在属性更改时更新图像。
或者--一种"蛮力"的解决方法,同样,* 可能 * 适合你:
创建一个按钮(具有匹配的属性),隐藏或定位在视图外部,并设置其
config.showsActivityIndicator = true
.然后将visible按钮的Height约束为nonvisible按钮的Height。