UITableView setRowHeight如何提交更改

时间:2012-10-15 19:00:24

标签: objective-c uitableview setneedsdisplay row-height

我的设计UITableViewCell包含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属性是在界面旋转并重新绘制之前设置的,但由于某些奇怪的原因,此方法不再被调用...

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为

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

导致表视图重新评估所有行高,因此您可以尝试此操作。