相关疑难解决方法(0)

iOS5,UIScrollView和layoutSubviews行为

在我的应用程序(代码非常类似于Apple的WWDC10的PhotoScroller演示)中,我有一个UIScrollView.在滚动视图中,我用以下代码覆盖了layoutSubviews:

- (void) layoutSubviews {
    [super layoutSubviews];
    // center the image as it becomes smaller than the size of the screen
    CGSize boundsSize = self.bounds.size;
    ...
 }
Run Code Online (Sandbox Code Playgroud)

在iOS 4.x中,如果应用程序在横向模式下启动(用户将其保持为横向),则layoutSubviews将被调用两次(非常快).第一次调用它时,boundsSize具有指示其纵向的尺寸,但之后立即再次调用它,self.bounds.size返回指示设备处于landsacpe并且我的布局计算正常工作的尺寸.

在iOS 5.x中,layoutSubviews仅调用一次,其中bounds.size返回指示纵向的尺寸,并且它没有得到第二次调用,因此我的所有计算代码都搞砸了.

如果用户physcially旋转设备,然后layoutSubviews被调用和正常工作 - 这样用户就开始横向应用(平不正确地),旋转为纵向(平correcty),然后转回到风景(现提请正确).

它是我缺少的layoutSubviews的第二次"自动"调用.

有人注意到这个或有什么建议吗?

更新:

我确实在iOS 5的UIKit发行说明中找到了这个,但我不确定它是否相关,甚至是这种变化的影响.

iOS 5中的旋转回调不适用于通过全屏显示的视图控制器.这意味着,如果你的代码呈现了另一个视图控制器视图控制器,然后用户随后旋转设备,以不同的取向,在解雇,底层控制器(即呈现控制器)将不会收到任何旋转回调.但请注意,呈现控制器将获得aviewWillLayoutSubviews来电时它被重新显示,并且interfaceOrientation属性可以从这种方法进行查询和使用正确铺陈控制器.

进一步更新:

使用[UIView recursiveDescription],转储视图层次结构,我得到以下输出:

iOS 4(运行正常):

肖像:

2011-12-19 15:57:06.400 stroom[10889:11603] <0x5e7f9b0 stroomViewController.m:(402)> <UIView: 0x6a6f2f0; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0x6a659d0>>
   | <UIScrollView: 0x5e911e0; frame = (-20 0; 808 1024); clipsToBounds = …
Run Code Online (Sandbox Code Playgroud)

objective-c uiscrollview ios ios5

12
推荐指数
1
解决办法
4621
查看次数

为什么iOS不会在由didReceiveMemoryWarning发布之后自动从Nib加载的视图?

我的iPad应用程序大量使用自动旋转.这很棒.然而,我注意到,如果一个隐藏的视图是由默认实现释放didReceiveMemoryWarning(如描述在这里),当画面从笔尖重新加载,我正好是在景观,它加载它的肖像.这会对界面造成严重破坏,直到我手动旋转iPad并强制它进入正确的方向.

我原以为iOS会在当前方向加载视图; 这就是应用程序启动时的功能.但它没有,不是在被卸下之后didReceiveMemoryWarning.为什么不?我怎么能这样做呢?

uiviewcontroller didreceivememorywarning autorotate ios

5
推荐指数
1
解决办法
4045
查看次数