2011-03-07 78 views
0

有人可以總結有助於解決這個問題的關鍵Objective-C代碼片段。iPhone代碼爲auto uiLabel&uiTableViewCell字體改變時調整大小?

目標 - 在用戶更改字體大小後自動調整UITableView的大小。因此,如果用戶增加或減少字體,則(a)uiLabel高度應該改變以確保它們很好地包括文本,並且(b)uiTableViewCell高度也應該調整。

假設是:

  1. 的UITableView已通過 創建一個自定義單元格視圖的擴展 - 即在NIB創建一個新的觀點,即 形式爲 的UITableView單元格的內容視圖
  2. 每個定製 單元具有四個UILabel的形成UILabels的 2×2圖案 - 在底線上,即頂線2 和兩個
  3. 以便用戶增加字體 的 UILabels的水平間距將保持不變, 然而,標籤的高度會 變化

所以我想挑戰/問題,我將包括(並希望通過一些回答有人可以發帖的示例代碼)

  1. 可以這裏的出發點是在InterfaceBuilder中已經佈局的定製UITableViewCell嗎? (或者解決方案是否要求它完全以編程方式構建)?
  2. 如何計算標籤的高度?這只是與NSString方法「sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:」,我需要添加邊距等?
  3. 如何編程,以增加標籤的高度動態的 - 在這種方法你做到這一點&如何改變高度本身
  4. 如何保證時的UILabel在頂部展開&的增長,它會自動推下第二排的UILabel?這是默認情況下發生的還是有一個特定的屬性/設置你必須確保這個hapen。
  5. 如何在發生上述情況後自動增加TableViewcell的高度。使用哪種方法來執行此操作,以及如何以編程方式執行增加重繪操作。

希望這是有道理的。
感謝

回答

2
  1. 可以立足於廈門國際銀行文件作爲默認佈局,然後在運行時調整後的位置/大小。
  2. 是使用該方法計算所需的高度。您需要在標籤之間添加邊距。
  3. 更改標籤的框架。
  4. 您需要根據第一行的標籤+邊距x,y,高度來計算第二行標籤的x,y。
  5. 鉤用下面的方法,並返回新的高度:
    • (CGFloat的)的tableView:(UITableView的*)的tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+0

謝謝內文 - 我可以澄清:RE項目3:所以只需調整現有標籤上的高度是否正確?即不需要創建一個新的替代幀?RE項目4:換句話說,在一個幀中佈局UILabel沒有簡單的方法嗎?像佈局管理器類型的自動堆棧方法?注意事項5:「cellForRowAtIndexPath」和「heightForRowAtIndexPath」呼叫會一起排隊嗎?即不會得到一個發生,而不是另一個希望?前者可能會觸發後者嗎? – Greg 2011-03-07 06:24:35

+0

3.我通常做的是從標籤中獲取框架,調整它並將調整後的框架分配回標籤。 4.我不知道沒有僱用第三方庫(如果有的話)。沒關係 – Nevin 2011-03-07 07:28:41

2

要獲得UILabel的高度匹配您的目標字體,您可以使用NSStringsizeWithFont函數。

NSString *myText = @"Go Hokies"; 
UIFont *myFont = [UIFont boldSystemFontOfSize:15]; 
CGFloat lineHeight = [myText sizeWithFont:myFont].height; 

您可能會遇到的問題是,如果文本不能在您定義的邊界內水平放置。如果您希望字體相應縮小,請打開調整標記並設置一個這樣的分鐘。

myUILabel.minimumFontSize = 10; 
myUILabel.adjustsFontSizeToFitWidth = YES;