UITableView, по крайней мере, действительно отображает макет своего суперпредставления. Такое поведение может быть проблематичным, если у вас есть метод layoutSubviews, который может быть дорогим (например, если вы вызываете некоторый JavaScript).
Быстрое исправление - добавление промежуточного подпредставления, которое препятствует тому, чтобы представление прокрутки выложило ваше суперпредставление. Вместо этого он создаст промежуточное подпредставление.
Это может быть несколько несовершенным, но в большинстве случаев должно работать:
Предположим, UIView * intermediateView
определена как переменная экземпляра:
-(id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame: frame];
if (self)
{
UIScrollView * theScrollView; // = your scroll view or table view
intermediateView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
// Ensures your intermediate view will resize its subviews.
intermediateView.autoresizesSubviews = YES;
// Ensure when the intermediate view is resized that the scroll view
// is given identical height and width.
theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
[intermediateView addSubview: theScrollView];
// Ensure the frame of the scroll view is exactly the bounds of your
// intermediate view.
theScrollView.frame = bottomContainerView.bounds;
[self addSubview: intermediateView];
}
return self;
}
-(void) layoutSubviews
{
intermediateView.frame = CGRectMake(0, 50, 42, 42); // replace with your logic
}