水平UITableView

imr*_*ran 39 iphone orientation ipad

我希望在我的ipad应用程序中实现一个布局,它有一个非常适合的视图,可以向左和向右滚动,而不是向上和向下滚动:

所以而不是

第1行第2行第3行(垂直滚动)它将是:第1行,第2行,第3行(水平滚动)

我已经看到UItableView被设计为仅进行垂直滚动,因此进行转换不会产生预期的效果.是否有一种标准方法可以利用uitableview提供的数据源提供商?
我基本上想做的事情类似于Ipad上的BBC新闻阅读器应用程序与故事列表可供选择.

谢谢

小智 28

我发布了示例代码,演示了使用转换实现水平滚动表视图的一种方法.它被称为EasyTableView,为垂直和水平滚动表视图提供相同的界面.


die*_*dez 25

这是我使用的方法:

1)实现您自己的UITableView子类并覆盖其initWithCoder:方法,如下所示:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    assert([aDecoder isKindOfClass:[NSCoder class]]);

    self = [super initWithCoder:aDecoder];

    if (self) {

        const CGFloat k90DegreesCounterClockwiseAngle = (CGFloat) -(90 * M_PI / 180.0);

        CGRect frame = self.frame;
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesCounterClockwiseAngle);
        self.frame = frame;    

    }

    assert(self);
    return self;
}
Run Code Online (Sandbox Code Playgroud)

2)创建自己的UITableViewCell类并initWithCoder:再次覆盖:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    assert([aDecoder isKindOfClass:[NSCoder class]]);

    self = [super initWithCoder:aDecoder];

    if (self) {

        const CGFloat k90DegreesClockwiseAngle = (CGFloat) (90 * M_PI / 180.0);

        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesClockwiseAngle);
    }

    assert(self);
    return self;
}
Run Code Online (Sandbox Code Playgroud)

3)现在,您可以在IB中创建UITableView元素,并在身份检查器中将其类设置为"MyHorizo​​ntalTableView".

4)在IB中创建UITableViewCell元素,并在身份检查器中将其类设置为"MyHorizo​​ntalTableViewCell".

就是这样.

如果您不想使用IB来实例化表视图或单元格,这也可以通过覆盖其他初始值设定项来实现.

一个示例项目,我围绕这个概念建立在GitHub上找到.

  • 很好,但有一个问题......如果我在运行App时尝试调整表的大小,单元格将不会调整垂直大小.横向大小不是问题,因为有来自委托的heightForRow Methode ...但没有一个用于...并且在转换后自动大小不会工作:-( (3认同)

Jos*_*phH 7

如果您可以将应用程序限制为仅适用于iOS 6及更高版本,则最好的方法是使用UICollectionView.

如果你需要支持iOS 4/5,那么试试UICollectionView的一个开源重新实现,例如.PSTCollectionView


Saq*_*aud 5

这个问题已被苹果回答.苹果滚动示例

演示如何实现两种不同的样式UIScrollViews.第一个滚动条包含多个图像,显示如何使用多个数据块(在我们的示例中为5个单独的UIImageViews)布局大型内容.

这也适用于iPad.

  • 无效资源链接:( (2认同)

小智 3

现在您必须使用 UIScrollView 并将滚动设置为仅水平。至于数据,您需要自己处理出队和优化。如果您预计不会有超过十几个对象,那么您可能可以跳过它,但如果它们是数据密集型的,请尝试实现与 UITableView 使用的类似的数据源和加载。请注意,BBC 新闻阅读器应用程序还使用启用的分页功能来滚动每个“页面(4 个左右新闻图标)”。