2012-10-10 18 views
0

我在Xcode 4.5,在模拟器上运行专为iOS6的为什么在Interface Builder中更改字体大小会阻止UILabel调整大小以适应内容?

一个简单的测试应用程序这只是一个单一的UIViewController有一个UIScrollView,并在UIScrollView的一个单一的UILabel。

我在界面生成器中将UILabel中的NumberOfLines设置为0,并将其设置为ScrollView中的全宽 - 但只有约30个高度。我还将UIScrollView设置为垂直滚动。我为两个UI组件设置了两个IBOutlets,并将该文件的所有者设置为UIScrollView的代理(并放在UIViewController头部)。

在viewDidLoad中,我只是将标签的文本设置为一个很长的串。

- (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. "; 
} 

,然后在ViewDidAppear我设置滚动视图的内容大小到的UILabel的大小:

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

这似乎很好地工作 - 在的UILabel自动的和滚动调整其高度视图设置为正确的高度,并在文本中很好地滚动。大。

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

我已经手动试图调整大小的UILabel - 使用该解决方案建议在这里例如:

Sizing a UILabel to fit?

,并使用扩展名,当我设置的内容:

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的大小没有效果。这里发生了什么? (还有 - 我该做什么不同,以便我不会陷入这个混乱局面!)

+0

这是一个非常简单的小应用程序 - 我可以从头开始,并获得相同的结果。有人能够重现这种效果吗? –

回答

0

我不知道为什么你的代码不工作,因为有多种可能性 但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 = calculatedHeight/single_line_height_calculated_using_small_string ,然后根据no放置一些额外的偏移量。行

+0

这是另一种设置UILabel大小和UIScrollView内容大小的技术 - 但它具有与原始问题中的方法完全相同的行为(即,它似乎只适用于17.0的字体大小) –

相关问题