UiTableView不提供橫向模式下的水平滾動。正確旋轉UITableView並進行變換而不會混淆Interface Builder
我的UITableView是不是全屏幕(所以我不能只在旋轉時我的內容,這是圖片用它水平模式)
我發現,使用變換旋轉我的UITableView。我必須把它在界面位置建設者在一些奇怪的位置,以便旋轉時,它看起來正確.....
有沒有人做過這個沒有搞亂Interface Builder?相同的代碼?
UiTableView不提供橫向模式下的水平滾動。正確旋轉UITableView並進行變換而不會混淆Interface Builder
我的UITableView是不是全屏幕(所以我不能只在旋轉時我的內容,這是圖片用它水平模式)
我發現,使用變換旋轉我的UITableView。我必須把它在界面位置建設者在一些奇怪的位置,以便旋轉時,它看起來正確.....
有沒有人做過這個沒有搞亂Interface Builder?相同的代碼?
請參閱Apple網站上的Windows and Views概念指南中的自動修復行爲部分。這解釋瞭如何在不使用Interface Builder的情況下實現從縱向到橫向的自動旋轉,並且無需處理手動實現複雜變換。
至於旋轉你的自定義內容和禁用滾動,看到shouldAutorotateToInterfaceOrientation:interfaceOrientation
,willRotateToInterfaceOrientation:duration:
和didRotateFromInterfaceOrientation:
在UIViewController
。您可以實施這些方法來攔截旋轉事件,檢查您正在移動的方向,並在那裏處理自定義圖形和屬性設置。
編輯
在回答您的意見,我發現從Table View Programming Guide此位從蘋果:
的UITableView從 的UIScrollView,它定義了與內容較大 觀點滾動 行爲繼承比窗戶的大小。 UITableView重新定義了滾動 的行爲,只允許垂直滾動 。
也許蘋果已經認爲水平滾動表視圖違反了他們的人機界面準則。不知您是否可以重新定義滾動行爲,如果您將其分類爲UITableView
,但這可能是一大堆試驗和錯誤工作。如果你真的能夠做到這一點,我相信這裏的很多人會對你如何做到這一點感興趣。我搜索了一會兒,試圖找到其他人的解決方案,但我找不到任何東西。
然後,如果你這樣做,蘋果可能不會允許你的應用程序進入應用程序商店,假設它確實打破了HIG。
你可以實現你通過執行以下操作找什麼:
Boum!你現在有一個垂直單元的水平滾動表。您可能需要更正單元格和桌子的寬度和高度,以使所有內容看起來都正確,但我想這可能對您有所幫助。
另一個提示:你可以使用表格圖層來控制旋轉的中心點。 anchorPoint屬性(這是一個CGPoint)。如果您將其設置在視圖邊界中心以外的位置,則旋轉效果(以及任何其他效果)將使用該點作爲參考。
我試過這個,並且似乎無法使桌面正確旋轉回肖像。從肖像旋轉到風景,我可以根據需要調整細胞。但是,旋轉後,tableview不會垂直滾動,而是水平滾動。有什麼想法嗎? –
我知道這有點遲,但這是我的答案。
正如其他人所說,要實現水平滾動,您可以將90度轉換應用於tableview。但是,爲了擺脫奇怪的框架錯誤,您必須在轉換之前獲取框架,應用轉換並將框架恢復到原始框架。
// 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;
使用'M_PI_2'來代替'M_PI'。 –
OK,則問題是,由於的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的並不在橫向模式下提供水平滾動。所以如果我使用自動旋轉,它只會上下滾動,而不是左右移動。 – user82383