setContentOffset:动画:如果动画 = NO,则不会做任何事情

Posted

技术标签:

【中文标题】setContentOffset:动画:如果动画 = NO,则不会做任何事情【英文标题】:setContentOffset: animated: wont do anything if animated = NO 【发布时间】:2012-07-30 22:48:13 【问题描述】:

我正在尝试滚动到在 webView 中查看的 PDF 的最后查看位置。卸载 PDF 时,会保存 webView 的 scrollView 的 y 偏移量。然后,当重新打开 PDF 时,我想跳到他们离开的地方。

当动画设置为YES时,下面的代码可以正常工作,但是当它设置为NO时,没有任何反应

    float scrollPos = [[settingsData objectForKey:kSettingsScrollPosition]floatValue];
    NSLog(@"scrolling to %f",scrollPos);
    [webView.scrollView setContentOffset:CGPointMake(0, scrollPos) animated:NO];
    NSLog(@"ContentOffset:%@",NSStringFromCGPoint(webView.scrollView.contentOffset));

这个输出:

滚动到 5432.000000

CO:0, 5432

但 PDF 仍显示首页

我在这里查看了类似问题的答案,但他们没有解决这个问题。

感谢您的帮助:)

【问题讨论】:

你试过打电话给setNeedsDisplay吗?只是一个想法。或者您将偏移设置为比所需的动画少一个像素,然后将一个像素的移动动画到所需的位置。那它有用吗? 【参考方案1】:

UIWebView 组件完成PDF 的呈现之前,您不能触摸contentOffset。它适用于setContentOffset: animated:YES,因为动画会强制渲染。

如果在渲染开始后将contentOffset设置为至少0.3s(根据我的测试),完全没有问题。

例如,如果您在UIViewControllerviewDidLoad 中加载PDF,您可以在viewDidAppear: 中使用performSelector:withObject:afterDelay: 来延迟contentOffset 设置。

要在设置contentOffset 之前隐藏 PDF,您可以将其 alpha 设置为 0.01(不要将其设置为 0,除非渲染不会开始)并在设置 contentOffset 后将其设置回 1。

@interface ViewController : UIViewController

    UIWebView *w;


@property (nonatomic, retain) IBOutlet UIWebView *w;

@end

@implementation ViewController

@synthesize w;

- (void)viewDidLoad

    [super viewDidLoad];
    NSURL *u = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf"];
    [w loadRequest:[NSURLRequest requestWithURL:u]];
    w.alpha = 0.01f;


- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];
    [self performSelector:@selector(adjust) withObject:nil afterDelay:0.5f];


- (void)adjust

    float scrollPos = 800;
    NSLog(@"scrolling to %f",scrollPos);
    [w.scrollView setContentOffset:CGPointMake(0, scrollPos) animated:NO];
    NSLog(@"ContentOffset:%@", NSStringFromCGPoint(w.scrollView.contentOffset));
    w.alpha = 1;


@end

【讨论】:

以上是关于setContentOffset:动画:如果动画 = NO,则不会做任何事情的主要内容,如果未能解决你的问题,请参考以下文章

UITableView setContentOffset:动画不正确

UIScrollView setContentOffset:动画:奇怪的行为

UITableView, setContentOffset 动画:NO 不会在 iPad 上滚动

动画完成后执行任务(在 iOS 中)

如何在 iOS 11 中像点击状态栏一样调用缓慢滚动到顶部的动画?

WkWebview contentOffset 在设置动画 false 时不起作用