使用 presentViewController 时有趣的 UIScrollView

Posted

技术标签:

【中文标题】使用 presentViewController 时有趣的 UIScrollView【英文标题】:Funny UIScrollView when using presentViewController 【发布时间】:2013-10-29 09:35:09 【问题描述】:

总结: 我有一个带有可缩放内容的 UIScrollView。如果内容没有缩放并且我展示了 ViewController,那么当我关闭该 ViewController 时一切都很好。但是,如果我缩放了内容然后呈现ViewController,那么当我关闭 ViewController 时,内容和 UIScrollView 都会变得古怪。欢迎任何帮助,这是一个可怕的错误...谢谢!

测试项目: 可以在这里找到一个简单的测试...

http://twostatesaway.com/ModalWithScrollViewTEST.zip

或这里

https://drive.google.com/file/d/0B0pG5vRVzBTzdkVzdEtkdmVjdDA/edit?usp=sharing

屏幕截图:

屏幕 1:一切正常。我可以将模态显示一百万次,并且在关闭模态后内容将按预期工作

屏幕 2:放大内容。

屏幕 3:当我单击显示 ViewController 的按钮时,随着 ViewController(黑色)的出现,内容向右移动。

屏幕 4:模式显示在屏幕上。

屏幕 5:当我关闭 ViewConroller 时,内容很有趣,明亮的绿色视图似乎恢复正常,但按钮保持在其缩放位置,仍然向右移动。

屏幕 6:另一个有趣的事情是,现在我可以比以前缩小更多。最小缩放设置为 1.0,但现在似乎不起作用。

【问题讨论】:

我认为你的按钮不在黄色视图内。 我认为你没有下载测试项目。 Google 云端硬盘和所有其他共享网站在我的办公室被屏蔽。 twostatesaway.com/ModalWithScrollViewTEST.zip 为什么在storyboard项目中使用xib? 【参考方案1】:

试试这个方法……

1) 从- (IBAction)openModal:(id)sender 中删除代码并将其留空。

2) 在故事板中,将 secondViewController 类设为ModalViewController,如下所示。

3) 将线从按钮拖到第二个视图并使用 segue 作为模态,如下所示。

更新答案

1) 清除viewDidLoad 方法。

2) 在ViewWillAppear method.中写入如下代码

-(void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    self.scrollView.delegate = self;
    self.scrollView.minimumZoomScale = 1.0;
    self.scrollView.maximumZoomScale = 5.0;
    //self.scrollView.contentSize=CGSizeMake(320, 200);
    [self.scrollView setZoomScale:self.scrollView.minimumZoomScale];

【讨论】:

如果您有任何问题,请立即告诉我。 这对你有用吗? 感谢您的建议,但我得到了相同的结果。 @user273312,我得到了解决方案,请查看我更新的答案。 不,你的回答有帮助,但它只是重置一切,我希望它保持放大......感谢你的帮助。我不敢相信这是这么多车。它的简单代码。我想知道苹果不测试这种东西还是什么,这似乎是一种常见的设置。【参考方案2】:

这里接受的工作是在模态出现时捕获缩放和 contentOffset,然后在视图再次出现时设置属性...

//// Capture values
-(void)viewWillDisappear:(BOOL)animated

    zoomedScale = self.scrollView.zoomScale;
    contentOffsetTemp = self.scrollView.contentOffset;


//// This prevents the content from getting messed up (thanks user1673099)
-(void)viewDidDisappear:(BOOL)animated

    [self.scrollView setZoomScale:self.scrollView.minimumZoomScale];


//// Then reassign them values
-(void)viewWillAppear:(BOOL)animated
   
    self.scrollView.zoomScale = zoomedScale;
    self.scrollView.contentOffset = contentOffsetTemp;

【讨论】:

以上是关于使用 presentViewController 时有趣的 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController 的动画属性

如何使用 presentViewController 呈现 iOS 键盘扩展

IIViewDeckController 和 presentViewController

透明 ViewController 可与 presentViewController 一起使用,但不能与 pushViewController 一起使用

PresentViewController切换界面

使用xib ios7从presentviewcontroller准备推送segue