ios學習--UILabel學習隨筆

label = [[UILabel alloc] initWithFrame:CGRectZero];
[label setText:text];
[label setLineBreakMode:UILineBreakModeWordWrap];
[
label setMinimumFontSize:FONT_SIZE];
//設置根據label大小換行
[
label setNumberOfLines:0];
[label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[label setTag:1]
//邊框
[[label layer] setBorderWidth:2.0f];

iPhone:動態獲取UILabel的高度和寬度

在使用UILabel存放字符串時,經常需要獲取label的長寬數據,本文列出了部分常用的計算方法。

1.獲取寬度,獲取字符串不折行單行顯示時所需要的長度 

CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 30)];

注:如果想得到寬度的話,size的width應該設爲MAXFLOAT。


2.獲取高度,獲取字符串在指定的size內(寬度超過label的寬度則換行)所需的實際高度.

CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];

注:如果想得到高度的話,size的height應該設爲MAXFLOAT。


3.實際編程時,有時需要計算一段文字最後一個字符的位置,並在其後添加圖片或其他控件(如info圖標),下面代碼爲計算label中最後一個字符後面一位的位置的方法。

CGSize sz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, 40)];

CGSize linesSz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];

if(sz.width <= linesSz.width) //判斷是否折行

{

        lastPoint = CGPointMake(label.frame.origin.x + sz.width, label.frame.origin.y);  

}

else  

{  

        lastPoint = CGPointMake(label.frame.origin.x + (int)sz.width % (int)linesSz.width,linesSz.height - sz.height);  

}

UILabel (UITableViewCell的動態高度)  

做一個普通iPhone程序,以一個twitter客戶端爲例,最花時間的UI部分可能就是UITableView了,而其中最重要的部分是則是UITableViewCell。 

以UITableViewCellStyleValue2爲例,可以用左側的Label來顯示用戶名,右側的Label顯示推的內容。那麼接下來要處理的問題就是怎麼樣來控制單元格高度來完美顯示長度不同的推。 

左側的Label叫做textLabel,只要簡單的用一個語句加載用戶名即可: 

cell.textLabel.text = @&quot;ztpala&quot;; 

右側的Label爲detailTextLabel: 

cell.detailTextLabel.text = @&quot;這是一條很長很長很長很長很長很長很長的推&quot; 

如果僅使用這兩條語句,顯示結果就會是下面那樣: 

????        ztpala  這是一條很長很長很... 

如果要顯示完整的推,關鍵部分有兩個: 

1. 讓detailTextLabel可以合適的換行 

2. 調整單元格的大小從而可以完全顯示detailTextLabel 

cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; //如何換行 

cell.detailTextLabel.numberOfLines = 0; //這個值設置爲0可以讓UILabel動態的顯示需要的行數。 

調整單元格的高度則比較複雜,需要小心計算,步驟如下: 

1. 首先要確定一條消息所佔的寬度,這個一般都是固定的,然後根據這個寬度來計算一段文字在這個寬度,某個字體下需要多少高度 

UIFont *font = [UIFont systemFontOfSize:17.0] //先確定使用的字體,因爲字體不同佔用的空間也不相同 

//假設someString代表消息,labelWidth代表某個固定寬度, 1000是個虛數只是爲了創造一個能完全放下這些文字的空間 

CGSize size = [someString sizeWithFont:font constrainedToSize:CGSizeMake(labelWidth, 1000) lineBreakMode:UILineBreakModeWordWrap]; 

//size即返回的完全顯示消息實際需要的空間 

2. 確定單元格高度。最關鍵的長度不一的消息所需的高度已經確定,下面只要加上上所需固定空間即可以確定單元格高度,完整代碼 

Java代碼 
  1. - (CGFloat)tableView:(UITableView *)atableView heightForRowAtIndexPath:(NSIndexPath *)indexPath   
  2.   
  3. {       
  4.   
  5. UIFont *font = [UIFont systemFontOfSize:17.0]  
  6.   
  7. CGSize size = [someString sizeWithFont:font constrainedToSize:CGSizeMake(labelWidth, 1000) lineBreakMode:UILineBreakModeWordWrap];  
  8.   
  9. return size.height+10// 10即消息上下的空間,可自由調整  
  10.   
  11. }  



總體來說很簡單,但當你需要自己格式化單元格顯示的時候,整個處理還是比較繁雜。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章