4

自動レイアウトに問題があります。私はUITableViewCell内部のビューを持っています。このビューをセルよりも小さくしたいので、制約を追加しました:

  • 垂直スペース (10) トップ
  • 垂直スペース (10) 下
  • 横スペース (10) 先頭スペース
  • 横スペース (10) 末尾スペース

tableView が表示されると、セルは正常に表示されますが、tableView を下にスクロールして上にスクロールすると、セル内のビューのサイズが変更され、セル内のスペースがすべて使用されます。

正しいセル: ここに画像の説明を入力

不適切なセル (スクロール後) ここに画像の説明を入力

これについてはすでに検索しましたが、同様のものは見つかりませんでした。この人も同じ問題を抱えていたと思いますが、答えがありません: 同様の問題

事前に助けてくれてありがとう!

4

3 に答える 3

3

ここで私の質問に対する答えをついに見つけました。私のカスタム UITableViewCell クラスでは、次のようにしました。

- (void)awakeFromNib
{
    [super awakeFromNib];

    for (NSLayoutConstraint *cellConstraint in self.constraints)
    {
        [self removeConstraint:cellConstraint];

        id firstItem = cellConstraint.firstItem == self ? self.contentView : cellConstraint.firstItem;
        id seccondItem = cellConstraint.secondItem == self ? self.contentView : cellConstraint.secondItem;

        NSLayoutConstraint* contentViewConstraint = [NSLayoutConstraint constraintWithItem:firstItem
                                                                                 attribute:cellConstraint.firstAttribute
                                                                                 relatedBy:cellConstraint.relation
                                                                                    toItem:seccondItem
                                                                                 attribute:cellConstraint.secondAttribute
                                                                                multiplier:cellConstraint.multiplier
                                                                                  constant:cellConstraint.constant];

        [self.contentView addConstraint:contentViewConstraint];
    }
}

コンテンツビューはコンテンツのサイズを変更するか、似たようなものだと思います。これに対するより簡単な説明とより簡単な方法があれば、私はまだ他の答えを待っています. 助けてくれてどうもありがとう!

于 2013-06-20T12:20:40.983 に答える
1

今日、Xcode 5 とストーリーボードを使用して同じ問題が発生しました。最初は、カスタム テーブル ビューのセルが正しく表示されていましたが、テーブル ビューをスクロールしてセルを再利用すると、レイアウトがおかしくなりました。修正は次のように呼び出すことでしたsetNeedsLayout

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SettingTableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Setting" forIndexPath:indexPath];

    [tableViewCell.contentView setNeedsLayout];

    return tableViewCell;
}


本当の問題:

textLabelUITableViewCell の組み込みの label プロパティと同じ名前のラベル アウトレット に名前を付けました。これはあらゆる種類の奇妙さを引き起こしていました。コンセントのプロパティ名を一意の名前に変更するとすぐに、レイアウトの問題が解決されました。

于 2013-11-27T18:11:10.933 に答える
0

この問題は、UITableViewReuse Cell が新しいセルを作成する瞬間に発生するために発生します。あなたに役立つかもしれないいくつかの提案をします。

UIView1)間に追加

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath   
  {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        /// Your code;
    }
 return cell;

}

1) UIView を追加しますcell.contentView.

編集:

私の編集済みの回答に従う前に、次のコードは の行ごとに新しいセルを作成するため、メモリ管理に悪いことを伝えたいUITableViewので、注意してください。

ただし、UITableView行が制限されている場合 (50-100 の可能性があります)、次のコードを使用する場合は、それが適切である場合に適しています。

NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
    } 
于 2013-06-20T08:45:38.660 に答える