12

UITableViewに追加されたセルが左にインデントされることがあるという奇妙な動作に遭遇しました。これは iOS 8.3 でのみ発生し、いつ発生するかについて明確なパターンを見つけることができません。

同じことを経験した人はいますか?

4

5 に答える 5

13

私の tableViewCells は、iOS 8.3 で実行すると、以前のバージョンでは見られなかった左右の余白が増加していました。

設定:

    self.contentView.preservesSuperviewLayoutMargins = NO;

問題を修正し、すべてのバージョンでマージンを一定に保ちましたが、これは iOS 8 以降でのみ利用できることに注意してください。

したがって、たとえば、これを行う場所は次のとおりです。

- (void)awakeFromNib {
    if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        self.contentView.preservesSuperviewLayoutMargins = NO;
    }
}
于 2015-04-24T19:48:48.030 に答える
6

うーん、これは奇妙だ...

UITableViewCellContentViewcontentViewは、それ自体と一致しない場合があるようですUITableViewCellContentView。これUITableViewは、それ自体が画面よりも広いレイアウトの一部である場合に発生します (水平ページャーの場合など)。

幸いなことに、解決策は簡単です。制約を追加して、contentViewをその親に合わせます。contentViewレイアウト エディタで の制約を編集できないため、これはプログラムでのみ行うことができます。

- (void)awakeFromNib {
    // Initialization code

    // iOS 8.3 bug, where contentView's x position isnt aligned with self's x position...
    // So we add a constraint to do the obvious...
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}

これは iOS 8.3 でのみ発生し始めましたが、修正は安全で、以前のバージョンとの下位互換性があるようです。

いつものように、あなた自身の経験をコメントしてください。

于 2015-04-10T23:11:32.660 に答える
4

layoutMarginsプロパティが原因のようです。制約の2番目の項目「マージンに相対的」のチェックを外しましたが、すべてうまくいきました。記事はこちら。

于 2015-04-16T16:55:38.893 に答える
0

これは私のために修正されました。アウトレットに再接続されたとプロパティUITableViewCellの使用をやめました。imageViewtextLabel

于 2015-10-22T18:32:30.777 に答える