Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILabel不会自动收缩_Ios_Objective C_Autolayout_Uifont - Fatal编程技术网

Ios UILabel不会自动收缩

Ios UILabel不会自动收缩,ios,objective-c,autolayout,uifont,Ios,Objective C,Autolayout,Uifont,我正在尝试创建一个视图,该视图根据其父视图的高度缩放特定的UILabel。在故事板中,我将“自动收缩”选项设置为“最小字体大小”,值为8,行数设置为1。但是,我注意到,如果将行数设置为1,则字体大小不会调整以适应。如果将行数设置为0,则会发生自动收缩,但字体大小小于我为4.0“显示指定的147大小 (顶部):在3.5英寸显示屏上,左:num lines=1,右:num lines=0 (底部):在4.0英寸显示屏上,左:num lines=1,右:num lines=0 理想情况下,我希望4

我正在尝试创建一个视图,该视图根据其父视图的高度缩放特定的UILabel。在故事板中,我将“自动收缩”选项设置为“最小字体大小”,值为8,行数设置为1。但是,我注意到,如果将行数设置为1,则字体大小不会调整以适应。如果将行数设置为0,则会发生自动收缩,但字体大小小于我为4.0“显示指定的147大小

(顶部):在3.5英寸显示屏上,左:num lines=1,右:num lines=0

(底部):在4.0英寸显示屏上,左:num lines=1,右:num lines=0


理想情况下,我希望4.0“屏幕的字体大小为147,并使其能够在3.5”的屏幕上缩小。

我的理解是,如果将
numberOfLines
设置为
1
,标签将根据宽度而不是高度自动收缩。这应该可以解释左上方的图像


至于右下角的图像,我会尝试增加标签的高度。它会根据文本的固有内容大小自动收缩,因此看起来147字体大小的内容高度当前高于较高屏幕中的标签高度。

垂直和水平自动收缩的解决方案这很简单:

label.font = [UIFont fontWithName:gMainFont size:label.height];
label.minimumScaleFactor = 0.1;

自动收缩似乎仅适用于宽度小于所需的情况,而不适用于高度不足的情况

我用一个自定义子类解决了这个问题:

class HeightAutoShrinkingLabel: UILabel {
    override func layoutSubviews() {
        super.layoutSubviews()
        while self.font.pointSize > 1 {
            if self.intrinsicContentSize.height <= self.frame.height {
                // Fits
                break
            }
            self.font = self.font.withSize(font.pointSize - 1)
        }
    }
}
类高自动收缩标签:UILabel{
覆盖func布局子视图(){
super.layoutSubviews()
而self.font.pointSize>1{

如果self.intrinsicContentSize.height
最小字体大小
不推荐使用,您现在应该使用
最小字体比例
我将UILabel的前缘和后缘设置为距父标签基本20。顶部和底部标签之间的空白也是中间标签的一部分,因此应该有足够的高度nd宽度,以使其更大。只有在宽度不足时才起作用。当高度不足时,什么也不会发生。