水平的UITableView
我想实现我的iPad应用程序中的布局具有uitable观点,即滚动左右而不是上下:水平的UITableView
因此,而不是
行1个 行2 排3 (垂直滚动) 这将是: 第1行,2行,3行 (水平滚动)
我见过的UITableView设计只做垂直滚动这样的变换也没有达到预期的效果。有没有一种标准的方式来利用像uitableview提供的数据源提供程序的优势?
我基本上想做一些类似于ipad上的BBC News reader app所做的事情,以及可供选择的故事列表。
感谢
现在你必须使用的UIScrollView和集中滚动只到水平位置。至于你需要处理的数据你自己的出库和优化。如果您不希望超过十几个对象,那么您可以跳过它,但是如果它们是数据密集型的,则尝试实施类似于UITableView使用的数据源和加载。请注意,英国广播公司新闻阅读器应用程序还使用启用分页功能来滚动每个'页面(4左右新闻图标)'。
此问题已被answered by apple。通过苹果滚动示例
演示如何实现两个 不同风格的UIScrollViews。第一个卷轴包含多个 图像,显示如何使用多个数据块 (在我们的情况下为5个单独的UIImageView)来布置大型 内容。
这也适用于iPad。
我已经发布了示例代码,演示了使用变换实现水平滚动表视图的一种方法。它被称为EasyTableView并为垂直和水平滚动表视图提供相同的界面。
伟大的代码! – 2012-02-09 17:57:53
奇妙的代码位,很好的一个! – 2013-01-05 17:11:09
这是我使用的方法:
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;
}
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;
}
3)现在,你可以创建IB一个UITableView元素,并将其类为“MyHorizontalTableView”在身份检查员。
4)在IB中创建您的UITableViewCell元素,并在身份检查器中将其类设置为“MyHorizontalTableViewCell”。
就是这样。
如果您不想使用IB来实例化您的表格视图或单元格,这也可以通过重写其他初始化器来工作。
A sample project我围绕这个概念构建的可以在GitHub中找到。
不错,但有一个问题....如果我尝试在运行应用程序时调整表的大小,单元格将不会调整垂直。水平尺寸不是问题,因为有heightForRow Methode来自代表...但没有人与......并且在转换之后autoresize不会工作:-( – Raegtime 2012-08-02 15:16:57
我需要完成所有这4个步骤? – 2014-02-25 12:09:32
@OmerObaid - 还有其他方法可以实现相同的结果。您理论上可以覆盖其他初始化器。这只是一种方法。 – diegoreymendez 2014-02-26 15:02:33
如果您可以将您的应用限制为仅限iOS 6及更高版本,则最好的方法是使用UICollectionView。
如果您需要支持iOS 4/5,请尝试UICollectionView的开源重新实现之一,例如。 PSTCollectionView
我写了一个简单的UIScrollView子类,喜欢的UITableView实现细胞的可重用性,该谟MMHorizontalListView在GitHub上,也有一个测试项目,所以你可以看到如何用一个例子使用它,它的工作原理也与老的iOS像4.x版本(可能更旧...)
有一个简单的绝妙技巧,让UITableView能够完成垂直和水平滚动。
你可以在有和没有自动布局的情况下做到这一点 - 我会用自动布局解释它。
在你UITableView有一个宽度约束和没有尾随对齐约束。 将此宽度约束与IBOutlet绑定,并在您的控制器中将以下设置设置为表视图上的属性。
let contentWidth = 1000 // you calculate that
tableViewWidthConstraint.constant = contentWidth
tableView.contentSize.width = (contentWidth * 2) - UIScreen.main.bounds.size.width
的实现代码如下必须是全幅呈现在水平方向上的所有内容,以及我们与内容大小玩弄屏幕尺寸做的伎俩相比。
下面的下面的作品他们的位置,但你可以在生命周期尝试在不同的步骤:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableViewWidthConstraint.constant = contentWidth
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tableView.contentSize.width = (contentWidth * 2) - UIScreen.main.bounds.size.width
}
// and this is needed to support rotation:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) -> Void in
self.tableView.contentSize.width = (contentWidth * 2) - UIScreen.main.bounds.size.width
}, completion: nil)
}
super.viewWillTransition(to: size, with: coordinator)
}
死的资源链接:( – ULazdins 2016-12-20 07:37:28
该示例代码是太旧,你仍然可以访问HTTPS: //web-beta.archive.org/web/20100805074840/developer.apple.com:80/iphone/library/samplecode/Scrolling/Listings/ReadMe_txt.html – 2016-12-20 12:56:12