我想實現我的iPad應用程序中的佈局具有uitable觀點,即滾動左右而不是上下:水平的UITableView
因此,而不是
行1個 行2 排3 (垂直滾動) 這將是: 第1行,2行,3行 (水平滾動)
我見過的UITableView設計只做垂直滾動這樣的變換也沒有達到預期的效果。有沒有一種標準的方式來利用像uitableview提供的數據源提供程序的優勢?
我基本上想做一些類似於ipad上的BBC News reader app所做的事情,以及可供選擇的故事列表。
感謝
我想實現我的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