2013-02-09 76 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