使用 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 呈现 iOS 键盘扩展
IIViewDeckController 和 presentViewController
透明 ViewController 可与 presentViewController 一起使用,但不能与 pushViewController 一起使用