4

I have created a UITableViewCell using UITableViewCellStyleValue1, which the Apple docs define as:

A style for a cell with a label on the left side of the cell with left-aligned and black text; on the right side is a label that has smaller blue text and is right-aligned. The Settings application uses cells in this style.

I am trying to set the cell text to display some short text on the left, and some long text on the right, e.g.

URL http://www.mylongurl.com/subdirectory/etc

My problem is that the left UILabel gets truncated instead of the right one so it displays as:

U... http://www.mylongurl.com/subdirectory/etc

If I make the URL even longer then BOTH the labels get truncated, e.g.

U... http://www.mylongurl.com...subdirectory/etc

Is there any way to make the right UILabel truncate instead of the left one without using a custom UITableViewCell? I know how to create a custom UITableViewCell, but it seems like overkill?

I can set the UILineBreakMode to change where the text truncates within the UILabel, but I can't see a way to make the detailTextLabel adjust its width to let the textLabel display itself.

[[lCell textLabel] setText:@"URL"];
[[lCell detailTextLabel] setText:@"http://www.mylongurl.com/subdirectory/etc"];
[[lCell detailTextLabel] setLineBreakMode:UILineBreakModeMiddleTruncation];
4

2 に答える 2

3

いくつかのオプションがあります。

おそらく、あなたが求めているように見えるものに精神的に最も近いのは、あなたUITableViewDelegateのラベルフレームをいじることですtableView:willDisplayCell:forRowAtIndexPath:。( でセル レイアウトの変更を行っても、UITableViewDataSourceの後で独自の内部レイアウト作業を行うtableView:cellForRowAtIndexPath:ため、うまくいきません。)の -を使用して、 のレイアウト要件を把握することができます。UITableViewCellstableView:cellForRowAtIndexPath:NSStringsizeWithFont:textLabel

UITableViewCell前述のように、サブクラス化や設定など、さまざまなアプローチを取ることもできますcell.textLabel.adjustsFontSizeToFitWidth = YES

于 2009-11-09T16:33:07.843 に答える
3

最善の解決策は、UITableView セルのサブクラスを作成し、ここにあるようなラベルにカスタマイズを設定することですinitlayoutSubviews左のラベルを広くしたい場合は、おそらくラベルを上書きしてサイズを変更する必要があります。

- (void)layoutSubviews {
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(0.0, 0.0, 100.0, self.frame.size.height);
    self.detailTextLabel.frame = CGRectMake(0.0, 0.0, 220.0, self.frame.size.height);
}

明らかに、これらは任意の値です。ニーズに合わせてさまざまなサイズで遊びたくなるでしょう。

于 2009-11-09T15:30:48.750 に答える