私は uitableviewcells を持つ uitableview を持っていますが、テキストの一部が長すぎてセルの端まで伸びており、選択するとアクセサリーティックビューが表示されます..
テキストが幅を超えて 2 行目に入る場合は、現在テキストを折り返しています。ただし、この UITableViewCell ラベルの幅を制限する良い方法があることを望んでいました。
私は uitableviewcells を持つ uitableview を持っていますが、テキストの一部が長すぎてセルの端まで伸びており、選択するとアクセサリーティックビューが表示されます..
テキストが幅を超えて 2 行目に入る場合は、現在テキストを折り返しています。ただし、この UITableViewCell ラベルの幅を制限する良い方法があることを望んでいました。
cellForRowAtIndexPath: 関数内。初めてセルを作成するとき:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
}
UITableViewCell の大きさを指定するので、heightForRowAtIndexPath 関数で指定します。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *str = [[arrTexts objectAtIndex:indexPath.row]; // filling text in label
CGSize maximumSize = CGSizeMake(300, 100); // change width and height to your requirement
CGSize strSize = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17] constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap] //dynamic height of string depending on given width to fit
return (10+strSize.height+10) // caculate on your bases as u have string height
}
の幅cellForRowAtIndexPath
を設定しますtextLabel
cell.textLabel.frame = CGRectMake(cell.textLabel.frame.origin.x, cell.textLabel.frame.origin.y, 280, cell.textLabel.frame.size.height);
それで全部です。
UITableViewCell
オーバーライドするにはサブクラスが必要だと思います-layoutSubviews
...呼び出しsuper
てから、ラベルを適切にフレーム化します。制約はある程度役に立ちますが、iOSではまだ使用していません。(問題が組み込みのレイアウト機能であると仮定すると、テキストを収容するために必要な幅のラベルが作成されます)
これを行うには2つの方法があります。
1)カスタムUITableViewCellクラスを作成し、任意の位置とサイズでUILabelを追加します。そして、それをcellForRowAtIndexPathメソッドで使用します。
2)それ以外の場合は、UITableViewCellのデフォルトのUILabelを使用しないでください。textLabelとdetailTextLabelを使用して、セルに独自のUILabelを任意の位置とサイズで追加します。