如何在Xcode中防止按钮拉伸?约束设置后异常拉伸求助
哎,这种Auto Layout的坑我简直太熟了!折腾几个小时确实闹心,我来给你捋几个大概率能解决的方向:
调整内容优先级,守住按钮自身尺寸
很多时候问题出在Content Hugging和Content Compression Resistance这俩容易被忽略的属性上。默认情况下按钮的水平抗压缩优先级不高,Auto Layout会优先拉伸按钮来满足布局要求。你可以在Xcode的Attributes Inspector里找到这两个属性,把Horizontal Content Hugging Priority和Horizontal Content Compression Resistance Priority都调到更高的数值(比如从默认的251改成750),让按钮优先保持自身内容的尺寸,拒绝被强行拉伸。清理冲突/冗余约束
有时候你以为删了宽高比约束,但可能还有隐藏的冗余约束没处理。建议打开Xcode的Debug View Hierarchy(调试视图层级),选中按钮后查看右侧的Constraints面板,看看有没有红色警告的冲突约束,或者重复的水平方向约束。把这些问题约束删掉,再重新测试按钮的表现。排查自定义逻辑对固有尺寸的影响
如果你的按钮是自定义的,或者在代码里设置了titleEdgeInsets、imageEdgeInsets,甚至重写了intrinsicContentSize,都可能干扰Auto Layout的尺寸计算。你可以暂时把这些自定义代码注释掉,看看按钮是否还会拉伸,逐步定位是不是自定义逻辑搞的鬼。换一种居中约束的配置方式
别直接只加Horizontal Center in Container约束,试试这个组合:先给按钮加Leading和Trailing约束,但把这两个约束的优先级调低(比如设为250),然后保留宽高比约束和Horizontal Center约束。这样Auto Layout会优先满足居中要求,而不是强制按钮填满Leading到Trailing的空间,自然就不会拉伸了。检查父视图的约束完整性
有时候锅不在按钮身上,而是父视图的约束有问题!比如父视图本身没有明确的Leading、Trailing、Top、Bottom约束,导致父视图被异常拉伸,进而连累子按钮。先确认父视图的约束是完整且正确的,再看按钮的布局是否恢复正常。
内容的提问来源于stack exchange,提问作者Nazim Kerimbekov

