我有一個顯示垂直數據的UIScrollView,但水平分量不超過iPhone的屏幕。問題在於用戶仍然能夠水平拖動,並基本暴露UI的空白部分。我曾嘗試設置:如何阻止UIScrollView水平彈跳?
scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;
這有一點幫助,但仍然不會阻止用戶能夠水平拖動。當然有一種方法可以很容易地解決這個問題?
我有一個顯示垂直數據的UIScrollView,但水平分量不超過iPhone的屏幕。問題在於用戶仍然能夠水平拖動,並基本暴露UI的空白部分。我曾嘗試設置:如何阻止UIScrollView水平彈跳?
scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;
這有一點幫助,但仍然不會阻止用戶能夠水平拖動。當然有一種方法可以很容易地解決這個問題?
這很奇怪,因爲無論何時我在任一維度的屏幕邊界內創建具有框架和內容大小的滾動視圖,滾動視圖都不會在該方向上滾動(或反彈)。
// Should scroll vertically but not horizontally
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollView.contentSize = CGSizeMake(320, 1000);
您確定框架完全適合屏幕並且contentSize的寬度不大於滾動視圖的寬度嗎?
嘗試將scrollView.bounces設置爲NO,並將scrollView.alwaysBounceVertical設置爲YES。
確保UIScrollView的contentSize不比UIScrollView本身更寬。在我自己的應用程序中,這足以避免水平滾動,除非我真的瘋狂地隨意滑動(例如,在視圖仍在減速時開始滾動)。
需要注意的事項:您知道沒有什麼額外的橫向看,但您的用戶會知道嗎?即使沒有額外的內容顯示水平,您可能需要稍微水平反彈。這讓用戶知道他們試圖水平滾動不會被忽略,沒有什麼可供他們看到的。但是,是的,你通常不想要反彈。
我的版本的網頁視圖,通常的解決辦法:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];
}
無論是否視圖滾動(和反彈)水平取決於三兩件事:
如果滾動視圖可以適合內容大小加上插圖,那麼它不會滾動或反彈。
避免同彈跳像這樣:
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);
我加入了這個答案,因爲以前的沒有考慮contentInset考慮。
在故事板,滾動視圖可以簡單地幫助垂直彈跳的複選框...
scrollView.bounces = NO;
爲我工作。
如果任何爲OS X開發的人正在尋找OS X 10,7,解決的辦法是設置horizontalScrollElasticity屬性false
/NO
上滾動視圖,就像這樣:
斯威夫特:
scrollView.horizontalScrollElasticity = false
的Objective-C:
scrollView.horizontalScrollElasticity = NO
這對我的作品在斯威夫特:
scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false
這是目前的一半,現在它滾動垂直,但從來沒有水平,但不再垂直反彈......如果它仍然可以垂直反彈,將會很好,因爲在iPhone上沒有反彈的情況下進行滾動似乎是不自然的。 – rustyshelf 2008-10-06 11:12:42
@rustyshelf我知道這有點遲,但除了Darron的回答,還要做`scrollView。 directionalLockEnabled = YES` – hyd00 2017-09-28 11:11:54