2009-06-30 183 views
72

我有一個UIView像iPhone的跳板。我使用UIScrollViewUIButtons創建了它。我想在所述滾動視圖上禁用水平滾動。我只想要垂直滾動。我如何做到這一點?如何禁用UIScrollView的水平滾動?

+5

你應該改變你的標題:你問的這個問題的水平和垂直的稱號。人們後來在搜索引擎上找到你的問題,所以它仍然重要2年後:) – Julien 2011-06-18 22:15:16

+0

@RahulVyas上面的人有一個點。改變標題可以減少任何通過搜索引擎(例如我)來到這裏的初學者的困惑)。 – SpacyRicochet 2011-09-12 09:23:50

+0

已經代表海報編輯了標題。 (雖然目前正在等待同行評議,編輯纔會顯現。) – 2011-09-28 12:02:00

回答

110

您必須設置UIScrollViewcontentSize財產。例如,如果你的UIScrollView是320個像素寬(在屏幕的寬度),那麼你可以這樣做:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight); 
[myScrollView setContentSize:scrollableSize]; 

UIScrollView將僅垂直滾動,因爲它已經可以水平顯示的一切。

+6

嗨。這個解決方案工作得很好!感謝那。我嘗試將靜態寬度設置爲0.對於我來說,這也起作用。我不知道以後會不會有一些副作用。但如果不知道尺寸(即適用於iPhone和iPad的通用代碼),這種方法效果非常好! – JackPearse 2011-04-28 10:32:48

+5

我認爲CGSizeMake(0,myScrollableHeight)更好,所以即使並非所有的子視圖都顯示,水平滾動功能也是禁用的。 – LightNight 2013-08-29 16:11:05

+0

注意使用分頁時將其中一個尺寸設置爲0將導致VoiceOver將頁碼聲明爲「第1頁的1」,而不管其值是否爲 – josef 2014-01-10 01:09:34

77

更新:

(@EranMarom在他的評論中指出後),您可以停在ScrollViewDelegate方法水平滾動或垂直滾動​​。 這是怎麼了,

停止水平滾動條:

如果你要水平滾動,那麼你就需要增加contentOffset.x。防止停止scrollview水平滾動。

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    sender.contentOffset.x = 0.0 
} 

停止垂直滾動:

如果要垂直滾動,那麼你就需要增加contentOffset.y。防止停止scrollview垂直方向的滾動。

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    sender.contentOffset.y = 0.0 
} 

上面的代碼防止改變xscrollview contentOffsety,並導致停止滾動的scrollViewDidScroll:方法。

10

因爲iOS7使用

self.automaticallyAdjustsScrollViewInsets = NO; 

//與

self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)]; 
    [self.pageView setShowsVerticalScrollIndicator:NO]; 
    [self.pageView setPagingEnabled:YES]; 
    [self.view addSubview:self.pageView]; 
0

一旦我做到了與一個UITableView只有1電池更換的UIScrollView 3頁創建你頁面滾動,它工作得很好。

0

我努力了一段時間嘗試在這個和其他線程中的各種建議失敗。

然而,在另一個線程(不知道在哪裏),有人建議使用在UIScrollView的負面約束爲他工作。

所以我嘗試了不一致的結果約束的各種組合。最終對我的工作是將-32的前後約束添加到滾動視圖中,並添加寬度爲320(和居中)的(不可見)文本視圖。

8

迅速解決

創建兩個出口,一個是你的觀點,一個用於滾動視圖:

@IBOutlet weak var myView: UIView! 
@IBOutlet weak var scrollView: UIScrollView! 
在viewDidLayoutSubviews您可以添加以下代碼

然後:

let scrollSize = CGSize(width: myView.frame.size.width, 
         height: myView.frame.size.height) 
scrollView.contentSize = scrollSize 

什我們已經完成了收集視圖的高度和寬度,並設置scrollViews的內容大小以匹配它。這將停止您的滾動視圖水平滾動。


再認識:

CGSizeMake需要寬度&使用高度CGFloats。您可能需要使用UIScrollViews現有高度作爲第二個參數。這將是這樣的:

let scrollSize = CGSize(width: myView.frame.size.width, 
         height: scrollView.contentSize.height) 
4

您可以選擇視圖,然後在Attributes Inspector取消選中User Interaction Enabled

0

我有tableview中contentInset在viewDidLoad中設置(如下圖),這是什麼導致水平滾動

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0); 

檢查是否有任何的tableview contentInset設置不同的原因,並禁用它

0

試試這個:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight); 
[scrollView setContentSize: scrollSize]; 
0

使用這一行。

self.automaticallyAdjustsScrollViewInsets = NO;