0

UITableViewCellsに。が含まれているデザインがありUIImageViewます。この画像は、縦向きでも横向きでも同じ比率である必要があります。そのため、UIDeviceOrientationDidChangeNotification通知を使用してインターフェイスの向きが変更されたときに呼び出されるメソッドがあります。

-(void)updateRowHeightForOrientation:(UIInterfaceOrientation)orientation {

    if(!IS_KNOWN_ORIENTATION(orientation))
        return;

    CGFloat rowHeightPortrait = (IPAD ? 320. : 160.);
    CGFloat widthPortrait = (IPAD ? 768. : 320.);
    CGFloat orientationWidth = (IS_PORTRAIT(orientation) ?
                                (IPAD ? 768. : 320.) :
                                (IPAD ? 1024. : 480.));

    CGFloat resultingRowHeight = rowHeightPortrait * orientationWidth / widthPortrait;

    [self.tableView setRowHeight:resultingRowHeight];
//    [self.tableView reloadData]; /* works if uncommented */
}

行がコメント化されていない場合、ビューが再描画され、行の高さが適切に設定されます。そうでない場合は、を使用する場合でも[self.tableView setNeedsDisplay][self.tableView setNeedsLayout]プロパティの新しい値は使用されません。

新しい値が適用されるようにUIを強制的にリロードするにはどうすればよいですか?

インターフェイスが回転して再描画される前にプロパティが設定されて-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)durationいるため、しばらくの間は機能していましたが、奇妙な理由で、このメソッドはもう呼び出されていません...rowHeight

ご協力いただきありがとうございます !

4

1 に答える 1

1

と思います

[self.tableView beginUpdates];
[self.tableView endUpdates];

テーブル ビューですべての行の高さが再評価されるため、これを試すことができます。

于 2012-10-15T19:11:09.490 に答える