繁体   English   中英

iOS ScrollView setContentSize不起作用

[英]iOS ScrollView setContentSize not Working

我正在使用Xcode 8,iOS10。我从Storyboard创建了ScrollView。 我的流程是

  • viewDidLoad方法具有Restcall,可从服务器获取信息。
  • 返回时,我解析了Response并基于该方法在Method中创建UIElement,然后将其添加到一个ParentView中。
  • 最后,将ParentView添加到ScrollView。
 [self.scrollView addSubview:parentView]; self.scrollView.frame = CGRectMake(0, 0, 320, parentView.frame.size.height); [self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)]; 

当我在此代码后打印Scrollview高度时,它显示的“ 680”比“我的视图高度”还要大。 我已经尝试过使用“ viewDidLayoutSubviews”方法,但是ScrollView仍然无法正常工作。 有谁知道为什么它不滚动?

代码中的问题是,您正在从父视图设置scrollview高度和contentSize高度。

您应该执行以下操作:

[self.scrollView addSubview:parentView];

self.scrollView.frame = CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height);

[self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)];

希望这会有所帮助

您正在设置错误的UIScrollView框架。 这就是为什么您的内容大小无法正常工作的原因。

尝试这个,

[self.scrollView addSubview:parentView];
self.scrollView.frame = CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height);
[self.scrollView setContentSize:CGSizeMake(320, parentView.frame.size.height)];

尝试在“接口生成器文档”下禁用自动布局:禁用:“使用自动布局”

就我而言,它正在工作。

动态计算UIScrollview contentSize(取决于子视图框架)并在主线程异步的viewDidLayoutSubviews中设置它

迅速:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    DispatchQueue.main.async {
        var contentRect = CGRect.zero

        for view in self.scrollView.subviews {
           contentRect = contentRect.union(view.frame)
        }

        self.scrollView.contentSize = contentRect.size
    }
}

目标C:

 - (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];

     dispatch_async(dispatch_get_main_queue(), ^ {
                        CGRect contentRect = CGRectZero;

                        for(UIView *view in scrollView.subviews)
                           contentRect = CGRectUnion(contentRect,view.frame);

                           scrollView.contentSize = contentRect.size;
                       });
}

在设置scrollView的框架之前尝试设置layoutIfNeeded

我也有类似的情况

-(void)viewDidLoad{
    [self.view layoutIfNeeded];
    self.myCustomScrollView.frame = self.contentView.bounds;
}

AutoLayout似乎与Xcode8中的帧位置不同。

只是不知道为什么,但是对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM