为什么UIScrollView会将空间留在顶部而不会滚动到底部

时间:2014-07-11 06:46:25

标签: ios iphone objective-c uiscrollview

我是Objective-C编程的新手。

我正在使用UIScrollView,上面有一些标签,图片和文字视图。

我已经关闭了Autolayout并且已经尝试了“调整滚动视图插图”(标题中描述的情况)和关闭(不滚动)。

这是我插入viewDidLoad:

    [scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];

但我必须错过一些非常简单的事情。

13 个答案:

答案 0 :(得分:41)

  

1 ...为什么UIScrollView在顶部留空?

使用Storyboard - 转到视图控制器>属性检查器>取消选中“调整滚动视图插入属性”

使用代码 - 对于额外空间集viewController属性automaticallyAdjustsScrollViewInsetsNO,默认情况下为YES

self.automaticallyAdjustsScrollViewInsets = false; 
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
  

2 ...不会滚动到底部

要使其滚动,请尝试contentSize中的大号CGSizeMake(320, 1687)。如果它有效则意味着您没有将contentSize设置得足够大以包含其所有内容。

答案 1 :(得分:31)

只需选择您的视图控制器并将显示的选项设置为false(取消选中)

ViewController Inspector

答案 2 :(得分:16)

iOS 11

if #available(iOS 11.0, *) {
    scrollView.contentInsetAdjustmentBehavior = .never
} else {
    automaticallyAdjustsScrollViewInsets = false
}

答案 3 :(得分:12)

iOS 11

在我的情况下,仅将IB中的此UIScrollView内容插入属性从Automatic更改为Never有帮助。

答案 4 :(得分:6)

Swift 3.0

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;     

答案 5 :(得分:2)

我在下面做了,我的问题解决了

Automatic中的UIScrollView Content Insets属性更改为Never,并在viewDidLoad()中添加以下代码

scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);`

enter image description here

答案 6 :(得分:1)

实际上,保证金与ScrollViewInsetscontentOffset无关。它只是SuperView.TopSafeArea.Top固定之间的冲突,当您将UIScrollView固定到顶部,底部,左侧和右侧时发生。

这是覆盖上边距的正确方法。

1)将四边都钉住。

Pinning

2)选择顶部约束>将第二项更改为Superview.Top

conflict

3)然后最后一步是将常数更改为0(零)。 enter image description here

您可能也想检查一下: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift

答案 7 :(得分:1)

在iPhoneX上也会发生这种情况,原因是自动布局试图解决的一些无意义的安全区域内容。 (针对iPhoneX)修复此问题:

if (@available(iOS 11.0, *)) {
    scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}

答案 8 :(得分:0)

在您的视图.m文件中,使用此代码来解决此问题

-(void)layoutSubviews{
    // To fix iOS8 bug of scrollView autolayout
    if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){
        [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
    }
}

答案 9 :(得分:0)

Swift 3.0

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;    

scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);

答案 10 :(得分:0)

Swift 3 (自动布局)

  1. 将“布局边距”更改为显式
  2. 根据需要设置保证金
  3. enter image description here

答案 11 :(得分:0)

这对我有用

_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];

答案 12 :(得分:0)

在面向用户界面时,我的UIScrollView显示了其UIScrollIndicator放错了位置。要解决此问题,您需要添加以下代码。

根据iOS 13,但支持iOS 12和更低版本:

    // Fixes the scroll indicator misplacement when rotated in landscape
    if #available(iOS 13.0, *) {
        v.automaticallyAdjustsScrollIndicatorInsets = false
    } else {
        // Fallback on earlier versions
        v.contentInsetAdjustmentBehavior = .never
    }

    v.contentInset = .zero
    v.scrollIndicatorInsets = .zero