为什么UIScrollView的滚动触发iOS 4.3中的layoutSubViews方法,而不是5.0&以上?

时间:2012-11-30 09:56:17

标签: ios5 uiscrollview ios4 layoutsubviews

我已经定制了UIView来创建自定义UI组件。

视图的层次结构就是这样。

----自定义UIView

----------------的UIScrollView

----------------------------- ScrollView中的子视图

-(id)initWithFrame:(CGRect)frame{

self = [super initWithFrame:frame];

if(self){

//Allocation and Initialization of ScrollView
//...
[super addSubView:scrollView];

}
return self;
}

- (void)layoutSubviews {

    DLog(@"%@",[NSThread callStackSymbols]);
    [super layoutSubviews];

    [self reloadData];

}

//This method can be used to reload the entire control
-(void)reloadData{
//Reload the subviews of control
}

滚动滚动视图时,将在iOS 4.3版中调用layoutSubviews方法。但是如果版本高于4.3(5.0,6.0),则不会调用此事件处理程序。

在我的用例中,我不希望调用layoutsubviews。

如何在滚动时确保滚动视图不会触发layoutsubviews方法?

1 个答案:

答案 0 :(得分:0)

我想出的解决方案如下:

  1. 在自定义视图
  2. 之上添加容器UIView(供参考ScrollViewHolder)
  3. 然后在视图ScrollViewHolder上添加UIScrollView。
  4. ----自定义UIView

    ----------------另一个UIView

    -------------------------------的UIScrollView

    -------------------------------------------- Sub Views in滚动型

    现在,init方法已更改为以下内容:

    -(id)initWithFrame:(CGRect)frame{
    
    self = [super initWithFrame:frame];
    
    if(self){
    
    //Allocation and Initialization of Container View
    
    [super addSubView:ScrollViewHolder];
    //Allocation and Initialization of ScrollView
    //...
    [ScrollViewHolder addSubView:scrollView];
    
    }
    return self;
    }