0

カスタム UI コンポーネントを作成するために UIView をカスタマイズしました。

ビューの階層はこのようになっています。

----カスタム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 メソッドをトリガーしないスクロール ビューがあることを確認するにはどうすればよいですか?

4

1 に答える 1

0

私が思いついた解決策は以下のとおりです。

  1. カスタマイズされたビューの上にコンテナUIView(参照用にはScrollViewHolder)を追加します
  2. 次に、ビューScrollViewHolderにUIScrollViewを追加します。

----カスタムUIView

----------------別のUIView

------------------------------- UIScrollView

--------------------------------------------ScrollViewのサブビュー

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;
}
于 2012-11-30T10:02:53.220 に答える