contentOffset 问题

Posted

技术标签:

【中文标题】contentOffset 问题【英文标题】:Issue with contentOffset 【发布时间】:2011-05-31 16:29:03 【问题描述】:

现在我正在开发一个使用自定义 splitView 的应用程序,它有一个 PDFTableController 代表 rootViewController 和 popover 表,我有一个 AffirmaPDFViewController 代表 detailViewController。

界面的设置方式是有一个scrollView,并且在scrollView中有三个WebView,它们加载要查看的PDF。这些 WebView 的宽度为 1024 像素,并排放置以允许滑动。

当我从表中选择一个项目时,我会返回所选项目和行号,因为我需要通过表示行号的乘数来更改滚动视图的原点。我的代码如下所示:

start = ((i) * 1024);

        NSLog(@"%d", start);
        scrollView.contentOffset = CGPointMake(webView1.frame.origin.x + start, webView1.frame.origin.y);

i 是由PDFTableController 提供的行号。 start 变量带有适当的值(0、1024、2048 等)并且滚动视图移动。但是,它不会更改正在显示的 webView。有谁知道这是为什么?

为了设置我使用 IB 的 webViews,但是在发生旋转时我更改了一些属性:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 

if(fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    counter = 0;
    webView1.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    webView2.frame = CGRectMake(768, 0, self.view.frame.size.width, self.view.frame.size.height);
    webView3.frame = CGRectMake(1536, 0, self.view.frame.size.width, self.view.frame.size.height);
    isLandscape = NO;

else 
    counter = 0;
    webView1.frame = CGRectMake(0, 0, 1024, 724);
    webView2.frame = CGRectMake(1024, 0, 1024, 724);
    webView3.frame = CGRectMake(2048, 0, 1024, 724);
    isLandscape = YES;


[webView1 reload];
[webView2 reload];
[webView3 reload];


[________ reload]; 调用是因为 webViews 加载 PDF 和旋转的问题,我知道有点牵强,但这是我能找到的唯一解决方法

我正在通过以下方式将内容加载到 webViews:

- (void)viewDidLoad 
pdfURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"affirma" ofType:@"pdf"]];
[webView1 loadRequest:[NSURLRequest requestWithURL:pdfURL]];

pdfURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"recursion" ofType:@"pdf"]];
[webView2 loadRequest:[NSURLRequest requestWithURL:pdfURL]];

pdfURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"review" ofType:@"pdf"]];
[webView3 loadRequest:[NSURLRequest requestWithURL:pdfURL]];

2011-05-31 10:38:16.465 AffirmaPDF[1927:207] 1.17666e-40, 3.4481e-36, 1.35492e-41, -1.99922

2011-05-31 10:38:16.467 AffirmaPDF[1927:207] 2.98701e-41, 1.35492e-41, 0, -1.99921

2011-05-31 10:38:16.468 AffirmaPDF[1927:207] 2.19627e-37, 3.4481e-36, 3.48195e-41, 3.4481e-36

2011-05-31 10:38:16.469 AffirmaPDF[1927:207] 2.19615e-37, 2.55515e-39, 2.19615e-37, -1.99921

2011-05-31 10:38:16.470 AffirmaPDF[1927:207] 0, 0

2011-05-31 10:38:16.470 AffirmaPDF[1927:207] 0, 0

【问题讨论】:

您能展示一下您是如何设置网络视图的吗? 我只是把 webViews 的代码,用这个代码,在旋转 ipad 时调整大小正常工作。 webViews 都是 scrollView 的孩子 是同一个网页视图还是同一个内容?如果是内容,你是如何加载它们的? 我只是编写了将内容加载到 webViews 上的代码 【参考方案1】:

根据垃圾值,滚动视图和 Web 视图似乎没有添加到视图层次结构中,或者它们没有通过插座连接。

【讨论】:

所有网点都连接在IB中。我有两个 .xib 文件。 MainWindow 和 AffirmaPDFViewController.xib。我是否需要向 MainWindow.xib 添加一个视图并让该视图加载 AffirmaPDFViewController? 您在哪个方法中执行第一段代码?最后的输出没有意义。 - (void)setDetailItem:(id)newDetailItem 方法中 可以贴出相关部分的接口文件吗? 但是您是否将scrollView 属性连接到笔尖中的UIScrollView 对象?

以上是关于contentOffset 问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UIScrollView 会自动改变 contentOffset?

dismissModalViewControllerAnimated 重置 contentOffset

UITableView 中 UIScrollView 中的 ContentOffset 问题

有没有我可以为 UIScrollview.contentOffset 截取的“willSet”和“didSet”?

滚动视图中 Tapped imageview 的 Contentoffset

防止 UIScrollView 重置 contentOffset