2014-10-09 149 views
5

我有一個使用自動佈局的UITableView。我有多種類型的單元格,但現在讓我們使用最簡單的單元格,即只有UILabel的單元格。使用自動佈局刪除UILabel填充/邊距

tableView:heightForRowAtIndexPath:我有以下代碼:

[self configureCell:self.detailsCell forRowAtIndexPath:indexPath]; 
    [self.detailsCell layoutIfNeeded]; 

    CGSize size = [self.detailsCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1; 

進而調用

- (void)configureCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // ... 
    cell.detailsLabel.text = self.data.myText; 
    cell.detailsLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
    // [cell.detailsLabel sizeToFit]; <- I tried this, but didn't help 
} 

Interface builder screenshot

,我最終得到這樣的:

Actual cell

綠色矩形是實際的單元格。紫色的矩形是UILabel。我不想要頂部和底部的填充/邊距紫色。我怎樣才能擺脫它?

+0

看起來你有情節板中的這些設置頁邊距常量。所以它的行爲完全如其。 – sha 2014-10-10 00:39:00

+1

這些邊距是綠色的。他不想在標籤本身內填充。 – Paludis 2014-10-10 06:27:03

回答

0

您可以將水平中心添加到UILabel。然後將「頂部空間到超級視圖」的關係設置爲「大於或等於」,並以相同的方式設置底部空間。編譯並運行,你可以看到UILabel的動態高度是根據UILabel的內容。

-1

邊距是由於您設置的自動佈局約束。在尺寸檢查器中將所有邊距設置爲零。

如果你使用Xcode 6 &支持iOS 8,約束可能被設置爲'容器邊距'而不是'容器'本身。它稍有不同,並將容器邊距設置爲零將適用於您。當您通過按「Alt」設置故事板中的約束時,您可以在它們之間切換。

+1

這些邊距不在標籤之內,問題是關於標籤內部的填充。 – Paludis 2014-10-10 06:28:17

5

你必須要提防「約束邊距:

比較這兩個圖像: Constrain to margins = YESConstrain to marings = NO

所以取消選擇「constrian邊距」,同時增加新的約束條件,宜解決你的填充/保證金問題:-)

如果你喜歡,你可以通過「編輯器/畫布/顯示佈局矩形」可視化這些邊距 沒有佈局矩形的觀點: Show Layout rectangles = NO 和佈局的矩形設置爲顯示(這說明你的問題相當不錯) Show Layout rectangles = YES

+0

可悲的是我試過這個。我所看到的是填充不是確定性的。有時比其他人高......雖然看起來好像文本更多,但填充變得更大。 – Eric 2014-10-15 18:53:21

+0

Mh ...也許你的約束是低於決定佈局(不知道爲什麼,但也許)。要在調試器中暫停時檢查此類型'po [[UIWindow keyWindow] _autolayoutTrace]'。 另一方面,也許嘗試設置標籤的'preferredMaxLayoutWidth'。這很重要,因爲這是標籤停止水平生長並開始垂直生長的寬度。 @Eric – Flori 2014-10-19 20:21:30