如何在SnapKit中设置按钮宽度为自适应最小且不超过最大限制

你当前的约束逻辑存在错误,对leading约束使用了lessThanOrEqualTo规则,相当于允许按钮左边界超出父视图左缩进2su的位置,约束系统为了满足你设置的所有约束规则,会默认将按钮拉伸到最大可用宽度,无法自动适配内容大小。
方案1:用最大宽度限制(更适合居中场景)
直接限制按钮的最大宽度,内容较短时按钮会自动适配文本宽度,内容超出最大宽度时自动限制到最大值:
backButton.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalTo(containerView.snp.bottom).offset(2.su) make.width.lessThanOrEqualToSuperview().inset(2.su) }
方案2:用左右边界限制(适合有自定义对齐需求的场景)
分别限制左右边界的最大偏移范围,按钮会优先适配内容大小,内容足够长时自动撑到左右缩进边界:
backButton.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalTo(containerView.snp.bottom).offset(2.su) make.leading.greaterThanOrEqualToSuperview().inset(2.su) make.trailing.lessThanOrEqualToSuperview().inset(2.su) }
可选补充配置
如果修改约束后仍出现按钮被拉伸的情况,可以手动提升按钮的水平内容拥抱优先级,告诉约束系统优先保持按钮的内容尺寸,不要随意拉伸:
backButton.setContentHuggingPriority(.defaultHigh, for: .horizontal)
内容的提问来源于stack exchange,提问作者user3492121
相关产品推荐
相关产品推荐

