Согласно Руководству по программированию Apple iOS Scroll View сейчас ..
Чтобы создать богатый пользовательский интерфейс, вы можете использовать вложенные представления прокрутки в своем приложении. До iOS 3.0 было трудно, если не невозможно сделать это. В iOS 3.0 эта функциональность полностью поддерживается и работает автоматически.
Так что вложение scrollviews совершенно нормально> iOS 3. Чтобы ответить на ваш вопрос, я добавил scrollview C в качестве подпредставления к «контейнеру» UIView - перед добавлением этого представления контейнера в scrollview B. Кажется, чтобы остановить отскок, тянущий родительскую прокрутку смотреть вниз, хотя мне пришлось довольно сильно и быстро провести пальцем, чтобы он продемонстрировал поведение, описанное вами, без представления контейнера.
@interface TiledScrollView : UIScrollView @end
@implementation TiledScrollView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
self.layer.borderColor = [UIColor whiteColor].CGColor;
self.layer.borderWidth = 10.f;
}
return self;
}
- (void)setContentSize:(CGSize)contentSize
{
[super setContentSize:contentSize];
BOOL horizontal = contentSize.width > self.frame.size.width;
if(horizontal)
{
CGFloat col = self.contentSize.width / 10.f;
for (int i = 0; i < 10; i++)
{
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(i * col, 0, col, self.contentSize.height)];
view.backgroundColor = [UIColor colorWithHue:(arc4random() % 100) / 100.f saturation:1.f brightness:1.f alpha:1.f];
[self addSubview:view];
}
}
else
{
CGFloat row = self.contentSize.height / 10.f;
for (int i = 0; i < 10; i++)
{
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, i * row, self.contentSize.width, row)];
view.backgroundColor = [UIColor colorWithHue:(arc4random() % 100) / 100.f saturation:1.f brightness:1.f alpha:1.f];
[self addSubview:view];
}
}
}
@end
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect bounds = [UIScreen mainScreen].bounds;
TiledScrollView * A = [[TiledScrollView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height)];
TiledScrollView * B = [[TiledScrollView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height / 2.f)];
TiledScrollView * C = [[TiledScrollView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height / 4.f)];
[A setContentSize:CGSizeMake(bounds.size.width * 4, bounds.size.height)];
[B setContentSize:CGSizeMake(bounds.size.width, bounds.size.height * 4)];
[C setContentSize:CGSizeMake(bounds.size.width, bounds.size.height * 4)];
UIView * container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height / 4.f)];
[container addSubview:C];
[B addSubview:container];
[A addSubview:B];
[self.view addSubview:A];
}
@end