【问题标题】:UIScrollView not scrolling in iOS7 with autolayout onUIScrollView 在 iOS7 中不滚动自动布局
【发布时间】:2013-12-17 13:15:06
【问题描述】:

我有一个 UIScrollView,里面有 6 个文本字段和一个按钮。 scrollView 内容不足,无法滚动。

但是当键盘显示时,我希望滚动视图滚动,这样用户就不必关闭键盘来选择另一个被键盘隐藏的文本字段。

我使用的是 iOS7 并启用了自动布局。

有什么建议吗?

我正在使用情节提要,我拥有的唯一代码如下。

reg.h 文件

interface registerViewController : UIViewController <UITextFieldDelegate, UIScrollViewDelegate>

【问题讨论】:

    标签: ios objective-c uiscrollview


    【解决方案1】:

    为了使滚动视图可滚动,内容大小必须大于滚动视图的框架,以便滚动视图可以滚动到。使用 setContentSize 调整内容大小:

    [scrollview setContentSize:CGSizeMake(width, height)];
    

    在这种情况下,你应该将大小调整为view.frame.width,view.frame.height + keyboard_height,然后在键盘出现后调整内容偏移:

    [scrollview setContentOffset:CGPointMake(0, 0 - keyboard_height)];
    

    如果由于某些与自动布局相关的奇怪原因,这仍然无法使视图可滚动,请在 viewDidLayoutSubviews 中实现此 setContentSize 函数以覆盖自动布局:

    - (void)viewDidLayoutSubviews {
         [scrollview setContentSize:CGSizeMake(width, height)];
    }
    

    编辑:要在关闭键盘后重置滚动视图,请将滚动视图内容大小重置为滚动视图的框架,并将偏移量重置为零:

    [scrollview setContentSize:CGSizeMake(scrollview.frame.size.width, scrollview.frame.size.height)];
    [scrollview setContentOffset:CGPointZero];
    

    附:要为内容偏移设置动画,请使用:

    [scrollview setContentOffset:offsetSize animated:YES];
    

    【讨论】:

    • 好吧,这行得通。虽然没有使用最后一段代码。现在唯一的事情是当我关闭键盘时,滚动视图仍然是可滚动的。如何撤消或重置回关闭键盘后的状态?因为在编辑文本字段后我不再需要它滚动了。
    • 对我来说这没有多大意义,因为自动布局应该自动通知滚动视图内容的大小。
    【解决方案2】:

    UIScrollViews 有一个 contentInset 属性,你可以设置 contentInset 在底部留出额外的空间来允许在不改变 contentSize 的情况下滚动。

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, 100, 0.0);
    scrollView.contentInset = contentInsets;
    

    上面的代码在底部添加了 100 个点。

    顺便说一句,关于这件事,有官方文档。它解释了你应该做的一切。你可以找到它here。您可以在“移动位于键盘下方的内容”部分下找到您要查找的内容

    【讨论】:

    • 太好了,我只遇到了 UIScrollView 自动布局在 iPhone 4 英寸上不滚动的问题。您的代码(我只需要 1.0 作为底部)解决了我的问题。
    【解决方案3】:

    试试

    1. 创建滚动视图
    2. 将视图添加到滚动视图(在我的情况下,我将视图添加为 mainView)。
    3. Set ScrollView autoresizing
    4. Set MainView autoresizing.

    5. 要将滚动内容大小设置为等于创建的视图,请添加以下行

    添加下面一行

    -(void)viewDidLayoutSubviews
    
    {
    
    [super viewDidLayoutSubviews];
    
    self.scrollView.contentSize = self.mainView.frame.size;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2013-08-23
      • 2015-04-16
      • 2016-04-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多