iOS ScrollView setContentSize不工作

时间:2016-10-07 10:24:40

标签: ios objective-c uiscrollview

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

  • viewDidLoad方法有Restcall,它从服务器获取信息。
  • 在返回时,我解析了Response并基于方法中的Create UIElements,然后添加到一个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。  有没有人知道为什么它不滚动?

5 个答案:

答案 0 :(得分:3)

您的代码中的问题是您要从父视图设置 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)];

希望这会有所帮助

答案 1 :(得分:3)

您正在设置function my_custom_price_format( $formatted_price, $price, $decimals, $decimal_separator, $thousand_separator ) { $decimal_part = substr(strrchr($price, $decimal_separator), 1); return '<span class="int-part">' . floor( $price ) . '</span>' . '<sup class="decimal-part">' . $decimal_part . '</sup>'; } add_filter( 'formatted_woocommerce_price', 'my_custom_price_format', 20, 5 ); 的错误帧。这就是为什么你的内容不起作用的原因。

试试这个,

UIScrollView

答案 2 :(得分:1)

尝试在&#34; Interface Builder Document&#34;下禁用自动布局。禁用:&#34;使用Autolayout&#34;

这是我的工作。

答案 3 :(得分:1)

动态计算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;
                       });
}

答案 4 :(得分:0)

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

我和你一样有类似情况。

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

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

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