Ответ 1
Я смог воспроизвести эту проблему и нашел обходной путь.
При использовании UIScrollView
, который наследует UITableView
, вы не можете изменить его contentOffset
не является анимирующим свойством. Вместо этого вам нужно использовать метод setContentOffset:animated:
.
Итак, вам нужно сделать следующее:
- Установите контроллер вида в качестве делегата
UITableView
. Я сделал это наviewDidAppear
. - Установите флаг, поэтому вы знаете в делетете, что свиток произошел, потому что вы активировали.
- В методе делегата
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
отскакивайте анимацию (здесь вы можете добавить задержку с помощьюperformSelector:afterDelay:
.
Здесь код:
@interface MyViewController ()
@property (assign, nonatomic) BOOL shouldReturn;
@end
@implementation MyViewController
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (TRUE) {
NSLog(@"animating table view");
self.shouldReturn = YES;
self.tableView.delegate = self;
[self.tableView setContentOffset:
CGPointMake(self.tableView.contentOffset.x,
self.tableView.contentOffset.y - 60)
animated:YES];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
if (TRUE) {
UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(refreshTableView:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refresh];
}
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
if (self.shouldReturn) {
self.shouldReturn = NO;
[self.tableView setContentOffset:CGPointZero animated:YES];
}
}
@end