IB中有一个选项可以取消选中滚动视图上的垂直滚动,但它似乎无法正常工作。
如何将scrollview设置为仅水平滚动,而不是在代码而不是IB中垂直滚动?
答案 0 :(得分:134)
自iOS7以来:
首先:内容大小宽度必须等于滚动视图的宽度
第二:在你的initWithNibName中:
self.automaticallyAdjustsScrollViewInsets = NO;
就是这样。
答案 1 :(得分:116)
尝试将contentSize的高度设置为scrollView的高度。然后应该禁用垂直滚动,因为没有任何东西可以垂直滚动。
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
答案 2 :(得分:49)
但是如果由于某些奇怪的原因你的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
答案 3 :(得分:22)
包括以下方法
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
并将滚动视图的内容大小宽度设置为等于滚动视图的宽度。
答案 4 :(得分:17)
我更新了内容大小以禁用垂直滚动,并且仍然保持滚动的能力。然后我发现我也需要禁用垂直反弹,以完全禁用滚动。
也许有人也有这个问题。
答案 5 :(得分:17)
您需要在内容大小上传递0才能禁用您想要的方向。
禁用垂直滚动
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
禁用水平滚动
public static void print(LinkedList<Integer> lli)
答案 6 :(得分:13)
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
您必须已确认到UIScrollViewDelegate
aScrollView.delegate = self;
答案 7 :(得分:3)
只需将y设置为始终位于顶部。 需要符合UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
这将保持滚动的减速/加速效果。
答案 8 :(得分:3)
在iOS 11上,如果您有兴趣创建一个贴在屏幕边界而不是安全区域的滚动视图,请记得添加以下内容。
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
答案 9 :(得分:1)
在 iOS11 中,可以使用以下属性
let frameLayoutGuide: UILayoutGuide
如果您将 frameLayoutGuide.topAnchor 和 frameLayoutGuide.bottomAnchor 的约束设置为您的 scrollView 子视图的相同锚点, / em>,则将禁用垂直滚动,并且 scrollView 的高度将等于其子视图的高度。
答案 10 :(得分:1)
最明显的解决方案是禁止子类中的y坐标更改。
override var contentOffset: CGPoint {
get {
return super.contentOffset
}
set {
super.contentOffset = CGPoint(x: newValue.x, y: 0)
}
}
在以下情况下,这是唯一合适的解决方案:
答案 11 :(得分:0)
很多答案包括将contentOffset
设置为0。我遇到了一种情况,我希望将scrollView内部的视图居中。这为我完成了工作:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}
答案 12 :(得分:0)
我觉得你可以
应该可以。