Xcode 为什么自动收缩不能正常工作?
这个问题困扰了我好一阵子了。通常,当我在故事板中布局UILabel时,我希望它以不同的屏幕宽度进行缩放。我通过创建一个约束来使用它,该约束将其宽度设置为与其superview的宽度成比例 然后我将文本的大小设置为300,启用自动收缩并将最小大小设置为1。理想情况下,这将缩小文本,使其在拟合约束时尽可能最大 但是,这种情况发生了 左侧的标签具有自动收缩功能,但文本不会展开以填充(黄色只是标签的背景,而不是另一个视图)。另一方面,右边的标签大小固定,但宽度相同,表明字体有更大的增长空间Xcode 为什么自动收缩不能正常工作?,xcode,swift,uilabel,nslayoutconstraint,Xcode,Swift,Uilabel,Nslayoutconstraint,这个问题困扰了我好一阵子了。通常,当我在故事板中布局UILabel时,我希望它以不同的屏幕宽度进行缩放。我通过创建一个约束来使用它,该约束将其宽度设置为与其superview的宽度成比例 然后我将文本的大小设置为300,启用自动收缩并将最小大小设置为1。理想情况下,这将缩小文本,使其在拟合约束时尽可能最大 但是,这种情况发生了 左侧的标签具有自动收缩功能,但文本不会展开以填充(黄色只是标签的背景,而不是另一个视图)。另一方面,右边的标签大小固定,但宽度相同,表明字体有更大的增长空间 怎么了?任
怎么了?任何修复都将不胜感激。经过反复试验,我找到了解决这个问题的方法,它以较小的间隔1缩小字体,以便更好地适应标签的宽度
extension UILabel {
func shrinkToFitWidth(margin: CGFloat?) {
// margin parameter will shrink the font by a certain amount more than necessary.
// Use this if you want a label with smaller text on a bigger background. Otherwise, use 0.
var initialSize : CGSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
if initialSize.width > self.frame.size.width
{
while initialSize.width > self.frame.size.width
{
self.font = self.font.fontWithSize(self.font.pointSize - 1)
initialSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
}
} else {
while initialSize.width < self.frame.size.width
{
self.font = self.font.fontWithSize(self.font.pointSize + 1)
initialSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
}
// went 1 point too large so compensate here
self.font = self.font.fontWithSize(self.font.pointSize - 1)
}
self.font = self.font.fontWithSize(self.font.pointSize - margin!)
}
func shrinkToFitHeight(margin: CGFloat?) {
// margin parameter will shrink the font by a certain amount more than necessary.
// Use this if you want a label with smaller text on a bigger background. Otherwise, use 0.
var initialSize : CGSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
if initialSize.height > self.frame.size.height
{
while initialSize.height > self.frame.size.height
{
self.font = self.font.fontWithSize(self.font.pointSize - 1)
initialSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
}
} else {
while initialSize.height < self.frame.size.height
{
self.font = self.font.fontWithSize(self.font.pointSize + 1)
initialSize = self.text!.sizeWithAttributes([NSFontAttributeName : self.font])
}
// went 1 point too large so compensate here
self.font = self.font.fontWithSize(self.font.pointSize - 1)
}
self.font = self.font.fontWithSize(self.font.pointSize - margin!)
}
扩展UILabel{
func shrinkToFitWidth(边距:CGFloat?){
//margin参数会将字体缩小一定量,超出需要。
//如果要在较大的背景上使用较小文本的标签,请使用此选项。否则,请使用0。
var initialSize:CGSize=self.text!.SizeWithatAttributes([NSFontAttributeName:self.font])
如果initialSize.width>self.frame.size.width
{
而initialSize.width>self.frame.size.width
{
self.font=self.font.fontWithSize(self.font.pointSize-1)
initialSize=self.text!.SizeWithatAttributes([NSFontAttributeName:self.font])
}
}否则{
而initialSize.widthviewdilayoutsubviews
方法中调用它,以便应用约束
干杯!这两个例子中的标签都是从边到边的吗?你能再添加两个屏幕截图吗?当你有一个非常大的单词时,会发生什么?@Korpel标签不是在彩色背景上,颜色是标签的背景。这有意义吗?ofc有意义。你试过用一个较小的标签来代替这么大的标签吗?在请改回UIView,让标签占用更小的空间,然后再试一次?@Korpel是的,同样的行为。事实上,我的实际项目有一个视图作为背景;我创建了一个新项目来测试东西并更清楚地演示问题。我可以问一下您使用的是什么版本吗?这是您的应用程序在我的Xcode上尝试的图像