2012-10-10 19 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的字體大小) –

相關問題