UIScrollView contentInset不起作用

时间:2014-01-15 16:36:37

标签: ios iphone objective-c uiscrollview uikit

我遇到问题,contentInset无法使UIScrollView使用键盘弹出窗口。 有点有效:出于某种原因,我需要大量数字(可能高于视图的高度?)才能执行任何操作,尽管contentInset的所有文档都显示了40.0这样的小数字(例如,对于条形图)或键盘高度。

我通过以下步骤在全新的应用程序中重现了这个问题:

  1. 使用Xcode新项目创建新的单一视图应用程序
  2. 在情节提要上,拖动滚动视图,填写完整视图尺寸
  3. 在故事板上,拖动按钮,位于屏幕的最底部(在滚动视图内)
  4. 将scrollview链接到ViewController
  5. 中的新属性
  6. 将按钮链接到ViewController
  7. 中的方法
  8. 按下按钮的方法设置contentInset
  9. 以下是ViewController的代码:

    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
    @end
    
    @implementation ViewController
    - (IBAction)button:(id)sender {
        self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 600, 0.0);
    }
    @end
    

    我缺少什么/为什么我需要大数字?

4 个答案:

答案 0 :(得分:13)

检查 self.scrollView.contentSize 是否设置正确。如果 contentSize.height 为0(将按照您的步骤进行操作),则需要大量插入。

尝试将 [self.scrollView setContentSize: CGSizeMake(320, 568)]; 添加到按钮方法中,您会注意到您的插图现在将按预期运行。

答案 1 :(得分:3)

马特是对的,它与contentSize有关。我正在使用自动布局,对我来说缺少的链接是显式设置scrollView的viewDidLayoutSubviews属性与我的contentView的帧大小相同(contentView是我的scrollView中包含所有其他视图的视图)。我的contentView被编码为基于我放置的元素的大小。它们“推出”了contentView,因此动态地驱动了contentView的大小。这是scrollView.contentSize中的“最后一步”,我将此动态大小链接到// Auto Layout Solution - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.scrollView.contentSize = self.contentView.frame.size; } 。现在事情按预期工作了。

{{1}}

答案 2 :(得分:1)

就我而言,我忘了在界面生成器中连接ScrollView ......

答案 3 :(得分:0)

使用带约束的自动布局时,我遇到了同样的问题。滚动视图拒绝与contentInset一起移动,直到我在keyboardWillShow的末尾添加了以下行,然后一切正常。如上所述,我怀疑自动布局会重置contentSize。

scrollView.contentSize = CGSize(width: scrollView.frame.width, height: scrollView.frame.height)