2013-02-09 73 views
5

我在我的自定義UITableViewCell中有三個UILabels。 這可能是一些UILabels將是空的(label.text == @""自動佈局UILabels

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"EventCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


     NSString *key = [[keysArray objectAtIndex:indexPath.section] description]; 

     UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
     namelabel.text = @"Label 1"; 

     UILabel *locationLabel = (UILabel *)[cell viewWithTag:101]; 
     location.text = @"Label 2"; 

     UILabel *timeLabel = (UILabel *)[cell viewWithTag:102]; 
     timeLabel.text = @""; 

     return cell; 
} 

所有非空UILabels垂直於電池使用自動佈局如何我中心?

這是它的外觀與三個標籤

This is how it looks with three labels:

它的外觀時UILables一個是空

How it looks when one of <code>UILables</code> is empty

這是我多麼希望它看起來:

And this is how I want it to look:

+0

您是在代碼或界面構建器中構建單元嗎?爲什麼這些標籤是空的還是沒有關係? – jrturton 2013-02-09 22:14:44

+0

在IB中。我希望我的標籤集中在容器中。這是不難做出來的,但是當其中一個標籤爲空時,我得到兩個其他標籤之間的差距,看起來不太好 – Oleg 2013-02-09 23:03:33

+1

這可能非常困難,因爲空的UILabel可能不會聲稱寬度,但肯定是高度,所以你可能不得不寫一些代碼,'其中一個標籤是空的,刪除該標籤'。 – 11684 2013-02-10 07:36:16

回答

3

這是棘手來實現的,但一個簡單的快捷方式可能是有一個標籤代替,用三行文字,受限於填充單元格的整個高度。標籤會自動將其內容居中放置。

您將在單元格中擁有三個字符串屬性而不是三個標籤,並且您的設置者將生成最終字符串(使用\n作爲新行)並設置標籤的文本。

如果每一行文本都有不同的樣式,沒問題,因爲您可以使用屬性字符串。

+0

非常好的方法!會做你喜歡的建議。並會使用屬性字符串,因爲我的標籤有不同的樣式!謝謝! – Oleg 2013-02-10 09:34:49

+0

其實我以爲有人會建議以編程方式添加/修改約束,但這個解決方案要簡單得多! – Oleg 2013-02-10 09:36:35

+0

修改約束是可能的,但肯定比這樣做更困難。它也可能會影響您的滾動性能,因爲您可以添加/刪除子視圖或更改佈局,因爲每個單元格都顯示在屏幕上,這兩者都是昂貴的操作。 – jrturton 2013-02-10 09:39:32