2013-02-09 13 views
5

私はに3つのUILabelsを持っています。 これは、いくつかのUILabels私は、自動レイアウトを使用して細胞内に垂直にすべての非空UILabelsを中央にするにはどうすればよい自動レイアウト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; 
} 

label.text == @"")空になるということでしょうか?

これは、3つのラベルUILablesの一つがHow it looks when one of <code>UILables</code> is empty

空で、これは私が望むどのようにあるときに、それがどのように見えるか

This is how it looks with three labels:

でどのように見えるかですそれを見て:

And this is how I want it to look:

+0

セルをコードまたはインタフェースビルダーで構築していますか?なぜラベルが空であるかどうかは重要ですか? – jrturton

+0

IB。私は自分のラベルをコンテナに集中させたい。それは作るのが難しいことではありませんが、ラベルの1つが空であれば、他の2つのラベルの間に隙間ができます。 – Oleg

+1

空白のUILabelが幅はあるものの、だからあなたは、ラベルのうちの1つの行に沿っていくつかのコードを書かなければならないかもしれません。 – 11684

答えて

3

これを達成するのは難しいですが、簡単なショートカットは、細胞の全体の高さを埋めるために制約3行のテキスト、と、代わりに単一のラベルを持っているかもしれません。ラベルはその内容を垂直方向に自動調整します。

3つのラベルの代わりにセルに3つの文字列プロパティがあり、セッターは最後の文字列(新しい行に\nを使用)を作成し、ラベルのテキストを設定します。

各テキスト行のスタイルが異なる場合は、属性付き文字列を使用できるため、問題はありません。

+0

非常に良いアプローチ!あなたが提案するようになります。私のラベルには異なるスタイリングがあるので、属性付き文字列を使用します!ありがとうございました! – Oleg

+0

実際、私は、誰かがプログラムで制約を追加/修正することを提案していると思っていましたが、このソリューションははるかに簡単です! – Oleg

+0

制約を変更することは可能ですが、これを行うよりも確かに難しくなります。サブビューを追加/削除するか、各セルが画面に表示されるたびにレイアウトが変更されるため、スクロールのパフォーマンスに影響を与える可能性があります。どちらも高価な操作です。 – jrturton

関連する問題