У меня есть scrollView
, настроенный как titleView
из navigationBar
. contentView
из scrollView
имеет 4 кнопки, все расположены динамически. Кнопки нужно отменить с помощью перетаскивания и прокрутки, поэтому я выделил их под setEnabled:NO
, когда touchesMoved
.
Когда я пытаюсь прокрутить scrollView, как только я пересекаю границы суперпредставления (то есть, пропуская нижнюю или верхнюю границы навигационной панели), scrollview пропускает 8 или 11 пикселей, в зависимости от того, является ли он верхним или кнопка. Это как-то связано с UIButtons
, потому что когда я просто использую UILabels
, проблема не сохраняется.
Соответствующий код:
Инициализация прокрутки:
menuWidth = 196;
rowHeight = 40;
rowMargin = self.frame.size.height - rowHeight;
//drop down menu stuff
self.scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
scrollView.backgroundColor = [UIColor clearColor];
scrollView.contentSize = CGSizeMake(self.frame.size.width, (self.frame.size.height)*choices.count);
scrollView.pagingEnabled = YES;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.clipsToBounds = YES;
scrollView.canCancelContentTouches = YES;
scrollView.delaysContentTouches = YES;
scrollView.delegate = self;
[self layoutMenu];
[self addSubview:scrollView];
[scrollView release];
Кнопка инициализации (-layoutMenu):
SKScrollableButton *tempButton;
NSString *text;
for (int i = 0; i < choices.count; i++) {
text = (NSString*)[choices objectAtIndex:i];
if (i == 0) {
text = [text stringByAppendingString:downArrow];
}
CGRect labelRect = CGRectMake(0, i*(rowHeight + rowMargin), menuWidth, rowHeight - 7);
tempButton = [[SKScrollableButton alloc] initWithFrame:labelRect];
[tempButton setTitle:text forState:UIControlStateNormal];
[tempButton addTarget:self action:@selector(buttonDown:) forControlEvents:UIControlEventTouchDown];
[tempButton addTarget:self action:@selector(buttonUpInside:) forControlEvents:UIControlEventTouchUpInside];
[self.scrollView addSubview:tempButton];
[tempButton release];
}
Нет событий, вызываемых кнопками, когда происходит пропуск, и только scrollViewDidScroll
обычные вызовы делегата происходят на scrollView
.
Я проверял, и пропуск определенно происходит, когда выходят за пределы суперпредставления, а не за пределы самого scrollView
.