为什么在界面生成器中更改字体大小会阻止UILabel调整大小以适应内容



我有一个用Xcode 4.5构建的简单测试应用程序,并在iOS6 的模拟器上运行

它只是一个带有UIScrollView的UIViewController,在UIScrollView中只有一个UILabel。

我在界面生成器中将UILabel中的NumberOfLines设置为0,并使其成为ScrollView中的全宽,但高度只有大约30点。我还将UIScrollView设置为仅垂直滚动。我为这两个UI组件设置了几个IBOutlet,并将文件的所有者设置为UIScrollView的委托(并放在UIViewController头上)

在视图DidLoad中,我只是将标签的文本设置为一个漂亮的长字符串。

- (void)viewDidLoad
{
[super viewDidLoad];
self.txtLabel2.text = @"`Twas brillig, and the slithy toves - Did gyre and gimble in the wabe: - All mimsy were the borogoves, - And the mome raths outgrabe. ";
}

然后在ViewDidPear中,我将滚动视图的内容大小设置为UILabel:的大小

-(void)viewDidAppear:(BOOL)animated
{
self.scrollView.contentSize = self.txtLabel2.bounds.size;
}

这似乎很有效——UILabel自动调整其高度,滚动视图被设置为正确的高度,并很好地滚动文本。太棒了

然而,我显然在这里做了一些严重的错误——因为如果我进入界面生成器,将UILabel的字体大小从默认值(17.0)更改为任何其他值,它就会停止工作。标签不再调整大小,并在第一行被截断。

我尝试过手动调整UILabel的大小,例如使用这里建议的解决方案:

调整UILabel的大小以适应?

当我设置内容时使用扩展:

self.txtLabel2.text = @"`Twas brillig, and the slithy toves - Did gyre and gimble in the wabe: - All mimsy were the borogoves, - And the mome raths outgrabe. ";
//use the current width - resize the height
[self.txtLabel2 sizeToFitFixedWidth:self.txtLabel2.bounds.size.width];

但这似乎没有任何效果。

我不明白为什么更改字体大小会改变UILabel自动调整大小的行为,也不知道为什么手动设置UILabel的大小没有效果。这里发生了什么?(还有——我应该做些什么不同的事情,这样我一开始就不会陷入这种混乱!)

我不知道为什么你的代码不起作用,因为有多种可能性但foll代码是你的代码的好选择

int scrollViews_fixed_width = self.scrollView.bounds.size.width;
self.txtLabel2.lineBreakMode = UILineBreakModeWordWrap; 
self.txtLabel2.numberOfLines = 0;
UIFont *font = [UIFont fontWithName:@"Helvetica" size:14.0];//Choose Your Font this is default font
CGSize constraintSize = CGSizeMake(scrollViews_fixed_width, 555);// Choose big value max possible height of textLabel or leave it 555 this will be enough
float  calculatedHeight = [@"Your Long String" sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap].height;
self.txtLabel2.frame = CGRectMake(0,0,scrollViews_fixed_width,calculatedHeight);
self.scrollView.contentSize = CGSizeMake(scrollViews_fixed_width, calculatedHeight);

您可能需要在高度上添加一些偏移,因为上面的代码计算没有考虑如果你对上面的内容感到满意,就不要使用foll实现为此,使用小字符串计算单线的高度,然后使用no_of_lines=计算高度/single_line_height_calculated_using_small_string然后根据线的数量对高度进行一些额外的偏移

最新更新