如何避免在方向更改后调整 UITableView(旋转)单元格的大小?

Posted

技术标签:

【中文标题】如何避免在方向更改后调整 UITableView(旋转)单元格的大小?【英文标题】:How to avoid the resize of the UITableView (rotated) cells after the orientation change? 【发布时间】:2012-05-30 15:40:57 【问题描述】:

我正在通过将其旋转 90 度来实现水平 UITableView

horizontalShopsTableViewController.view.transform = CGAffineTransformMakeRotation(-M_PI/2);

然后将其单元格向后旋转 90 度:

cell.contentView.transform = CGAffineTransformMakeRotation(M_PI/2);

我希望表格具有灵活的宽度。如果我不将其设置为灵活,则方向更改后一切正常。但是,如果我这样做,单元格的内容就会错位并消失。表格视图的“Autoresize Subviews”标志为假。

任何想法可能是导致问题的原因或可以使用哪些替代方法?

【问题讨论】:

【参考方案1】:

好的,问题是由于 tableview 的宽度是灵活的,在旋转之后单元格的宽度(实际上是高度)也增加了。我通过继承 UITableView 并覆盖 layoutSubviews 方法克服了这个问题,所以现在看起来像这样:

- (void)layoutSubviews 

    [super layoutSubviews];

    for (UIView* child in [self subviews]) 

        CGRect frame1 = child.frame;
        if ([child isKindOfClass:[UITableViewCell class]]) 
            frame1.size.width = 120;
            child.frame = frame1;        
         
    


无论如何,如果我将 Autoresize Subviews 显式设置为 false,我仍然不明白为什么 uitableview 会调整其单元格的大小。

【讨论】:

【参考方案2】:

uuuuh...你想达到什么目的?自动调整大小系统当然不尊重视图的任何转换。可能你必须手动调整它的大小。

但是你不能用标准的滚动视图做你想做的事吗!?使用变换来旋转 UI 组件并不是最好的主意,因为您会遇到其他问题。

【讨论】:

我也在考虑滚动视图,但是我想从 uitableview 功能中受益,例如使用 nsfetchedresultscontroller 填充其数据的可能性

以上是关于如何避免在方向更改后调整 UITableView(旋转)单元格的大小?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 调整 UITableheaderView 的大小

iPad - 带有 UITextField 的 UITableView - 方向改变时自动调整大小问题

方向更改后的 UIView addsubview:告诉视图调整大小

更改方向后iOS8无法重新调整模态表单的大小

自动布局 - UILabel 在方向更改后宽度缩小,这是由另一个应该自动调整字体大小的 UILabel 引起的

停止 UITableView 在方向更改时重新加载数据