Iphone 使用Transform正确旋转UITableView,而无需使用Interface Builder

Iphone 使用Transform正确旋转UITableView,而无需使用Interface Builder,iphone,uitableview,Iphone,Uitableview,UiTableView在横向模式下不提供水平滚动 我的UiTableView不是全屏的(因此我不能在旋转内容(即图片)时仅使用水平模式) 我发现使用变换旋转我的UiTableView。。我必须在Interface Builder中将其放置在某个奇怪的位置,以便在旋转时,它看起来正好 有没有人在没有干扰Interface Builder的情况下做到这一点?相同的代码?请参阅苹果网站概念指南中的自动调整大小行为部分。这说明了如何实现从纵向到横向再到反向的自动旋转,而无需使用Interface Bui

UiTableView在横向模式下不提供水平滚动

我的UiTableView不是全屏的(因此我不能在旋转内容(即图片)时仅使用水平模式)

我发现使用变换旋转我的UiTableView。。我必须在Interface Builder中将其放置在某个奇怪的位置,以便在旋转时,它看起来正好


有没有人在没有干扰Interface Builder的情况下做到这一点?相同的代码?

请参阅苹果网站概念指南中的自动调整大小行为部分。这说明了如何实现从纵向到横向再到反向的自动旋转,而无需使用Interface Builder,也无需手动实现复杂的变换

有关旋转自定义内容和禁用滚动的信息,请参见中的
应自动旋转指针界面方向:interfaceOrientation
将旋转到interfaceOrientation:duration:
,以及
didRotateFromInterfaceOrientation:
。您可以实现这些方法来截取旋转事件,检查移动到哪个方向,并在那里处理自定义图形和特性设置

编辑

作为对你评论的回应,我从苹果的网站上找到了以下内容:

UITableView继承自 UIScrollView,它定义了滚动 内容较大的视图的行为 比窗户大。 UITableView重新定义了滚动 允许垂直滚动的行为 仅限。

也许苹果认为水平滚动表格视图违反了他们的人机界面准则。我想知道如果您将
UITableView
子类化,是否可以重新定义滚动行为,但这可能需要大量的尝试和错误工作。如果你真的能做到这一点,我相信这里的很多人都会对你是如何做到的感兴趣。我四处搜索了一会儿,试图找到其他人的解决方案,但在那里我什么也找不到


如果你这么做了,苹果可能不会允许你的应用进入应用商店,假设它真的打破了HIG。

你可以通过以下操作实现你想要的:

  • 创建UITableView并通过代码或IB将其连接到UIViewController(不要使用UITableViewController)
  • 将90度逆时针变换应用于表格
  • 在tableView:cellForRowAtIndexPath:method中,在返回单元格之前,对单元格应用90度顺时针变换
  • 布姆!现在有了一个带有垂直单元格的水平滚动表。你可能需要调整你的单元格和桌子的宽度和高度,使一切看起来都正常,但我想这可能会对你有所帮助


    另一个提示:可以使用表格的图层控制旋转的中心点。anchorPoint属性(它是一个CGPoint)。如果将其设置在视图边界中心以外的其他位置,旋转效果(以及任何其他效果)将使用该点作为参考。

    我知道有点晚了,但我的答案如下

    正如其他人所说,要实现水平滚动,可以对tableview应用90度变换。但是,为了消除奇怪的帧错误,必须在变换之前获取帧,应用变换,然后将帧恢复到原始帧

    
    
    // Save the tableview frame (as it is layed out in IB)
    CGRect oldframe = tableview.frame;
    
    // Apply the transform
    tableview.transform=CGAffineTransformMakeRotation(M_PI/2);
    
    // For some weird reason, the frame of the table also gets rotated, so you must restore the
    //original frame    
    tableview.frame = oldframe;
    
    
    

    好的,问题是因为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;        
            } 
        }
    
    }
    

    感谢您的回答,但如上所述,UiTableView在横向模式下不提供水平滚动。因此,如果我使用自动旋转,它只会上下滚动,而不会左右滚动。使用
    M_PI_2
    而不是除以
    M_PI
    。迟做总比不做强!非常感谢。我尝试了这个,但似乎无法使tableview正确地旋转回纵向。从纵向旋转到横向,我能够按照我需要的方式调整细胞。但是,向后旋转时,tableview不会垂直滚动,而是水平滚动。有什么想法吗?