![](/img/trans.png)
[英]Using swipe gesture within UIScrollView without disabling horizontal and vertical scrolling
[英]Disabling vertical scrolling in UIScrollView
IB 中有一個選項可以取消選中滾動視圖上的垂直滾動,但它似乎不起作用。
如何在代碼中將滾動視圖設置為僅水平滾動,而不是垂直滾動而不是 IB?
從 iOS7 開始:
第一:內容大小寬度必須等於滾動視圖的寬度
第二:在你的 initWithNibName 中:
self.automaticallyAdjustsScrollViewInsets = NO;
就是這樣。
嘗試將 contentSize 的高度設置為 scrollView 的高度。 然后應該禁用垂直滾動,因為垂直滾動沒有任何內容。
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
是的,pt2ph8的答案是對的,
但是如果由於某種奇怪的原因你的 contentSize 應該高於 UIScrollView,你可以禁用實現 UIScrollView 協議方法的垂直滾動
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
只需在您的 UIViewController 中添加它
float oldY; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
// or if you are sure you wanna it always on top:
// [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}
它只是用戶滾動 UIScrollView 時調用的方法,這樣做會強制它的內容始終具有相同的 .y
包括以下方法
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
並將滾動視圖的內容大小寬度設置為等於滾動視圖的寬度。
您需要在內容大小中傳遞 0 以禁用您想要的方向。
禁用垂直滾動
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
禁用水平滾動
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
我更新了內容大小以禁用垂直滾動,並且滾動的能力仍然存在。 然后我發現我也需要禁用垂直反彈,以完全禁用滾動。
也許也有人有這個問題。
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
您必須已向UIScrollViewDelegate
確認
aScrollView.delegate = self;
只需將 y 設置為始終在頂部。 需要符合 UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
這將保持滾動的減速/加速效果。
在 iOS 11 上,如果您有興趣創建一個粘在屏幕邊界而不是安全區域的滾動視圖,請記住添加以下內容。:
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
從iOS11可以使用以下屬性
let frameLayoutGuide: UILayoutGuide
如果您為frameLayoutGuide.topAnchor和frameLayoutGuide.bottomAnchor約束你的滾動視圖的一些子視圖的相同錨,然后垂直滾動將被禁用,滾動視圖的高度將等於其子視圖的高度。
最明顯的解決方案是禁止子類中的 y 坐標更改。
override var contentOffset: CGPoint {
get {
return super.contentOffset
}
set {
super.contentOffset = CGPoint(x: newValue.x, y: 0)
}
}
在以下情況下,這是唯一合適的解決方案:
很多答案包括將contentOffset
設置為 0。我有一個案例,我希望 scrollView 內的視圖居中。 這為我完成了工作:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}
我想你可以
那應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.