Iphone 使用Transform正确旋转UITableView,而无需使用Interface Builder
UiTableView在横向模式下不提供水平滚动 我的UiTableView不是全屏的(因此我不能在旋转内容(即图片)时仅使用水平模式) 我发现使用变换旋转我的UiTableView。。我必须在Interface Builder中将其放置在某个奇怪的位置,以便在旋转时,它看起来正好Iphone 使用Transform正确旋转UITableView,而无需使用Interface Builder,iphone,uitableview,Iphone,Uitableview,UiTableView在横向模式下不提供水平滚动 我的UiTableView不是全屏的(因此我不能在旋转内容(即图片)时仅使用水平模式) 我发现使用变换旋转我的UiTableView。。我必须在Interface Builder中将其放置在某个奇怪的位置,以便在旋转时,它看起来正好 有没有人在没有干扰Interface Builder的情况下做到这一点?相同的代码?请参阅苹果网站概念指南中的自动调整大小行为部分。这说明了如何实现从纵向到横向再到反向的自动旋转,而无需使用Interface Bui
有没有人在没有干扰Interface Builder的情况下做到这一点?相同的代码?请参阅苹果网站概念指南中的自动调整大小行为部分。这说明了如何实现从纵向到横向再到反向的自动旋转,而无需使用Interface Builder,也无需手动实现复杂的变换 有关旋转自定义内容和禁用滚动的信息,请参见中的
应自动旋转指针界面方向:interfaceOrientation
,将旋转到interfaceOrientation:duration:
,以及didRotateFromInterfaceOrientation:
。您可以实现这些方法来截取旋转事件,检查移动到哪个方向,并在那里处理自定义图形和特性设置
编辑
作为对你评论的回应,我从苹果的网站上找到了以下内容:
UITableView继承自
UIScrollView,它定义了滚动
内容较大的视图的行为
比窗户大。
UITableView重新定义了滚动
允许垂直滚动的行为
仅限。
也许苹果认为水平滚动表格视图违反了他们的人机界面准则。我想知道如果您将UITableView
子类化,是否可以重新定义滚动行为,但这可能需要大量的尝试和错误工作。如果你真的能做到这一点,我相信这里的很多人都会对你是如何做到的感兴趣。我四处搜索了一会儿,试图找到其他人的解决方案,但在那里我什么也找不到
如果你这么做了,苹果可能不会允许你的应用进入应用商店,假设它真的打破了HIG。你可以通过以下操作实现你想要的:
另一个提示:可以使用表格的图层控制旋转的中心点。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不会垂直滚动,而是水平滚动。有什么想法吗?