嵌入式的UIScrollView没有加载其子视图
我有可能是一个奇怪的VC结构,在这里,我只是做了一个有点陌生,使其打破嵌入式的UIScrollView没有加载其子视图
的UIViewController(载有以下>)UIContainerView(嵌入 - >)的UIScrollView(包含 - > )UIView
我有最后的UIView,因为我无法弄清楚如何使滚动视图坚持一定的大小限制,所以我只是添加了“内容视图”。
问题是,现在的“内容视图的”数据没有加载
的日志的内容查看是:
<UIView: 0x81cd510; frame = (-306 0; 612 792); autoresize = TM+BM; layer = <CALayer: 0x81c2000>>
的日志滚动视图是
<UIScrollView: 0x81e5e90; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x81e67b0>; layer = <CALayer: 0x81e6060>; contentOffset: {0, 0}>
所以它似乎没有加载...什么给了?如何让它加载?
编辑澄清:
- 所有这些观点建立虽然IB
- 不使用自动版式(虽然这听起来很有趣)
- 的NSLog的方法是在顶部称为ViewDidAppear在视图 - 控制的视图层次链。 (也许这就是问题?)
编辑:上传的项目github上,使人们可以采取looksie https://github.com/Pinwheeler/ChiroMatic.git
我花了相当多的时间,通过你的项目要和,令人沮丧的,我无法推断出导致问题的原因。但我发现我能够通过重新创建您的场景来解决问题(并且我不得不重新创建这两个问题来解决问题)。我创建了一个项目分支并修复了这两个场景。我试图在源代码以及git存储库提交注释中注释我的更改,所以希望您可以按照我所做的更改进行操作。我的叉子,请访问:。
(只要让我知道你要我删除的回购协议,我很高兴将其删除,只要你想,因为我认为你不”不想我在GitHub上留下一个副本无限期)
一对夫妇的意见:
你说你不使用自动布局,但你。 (转到故事板上的第一个
Document Inspector
选项卡,您会看到“Use Autolayout”被选中。)如果您想使用它(它现在是Xcode中的默认设置),但是应该预先警告您失去了与iOS的向后兼容性如果您使用iOS 6之前的版本。 Autolayout功能强大,但当你第一次使用Autolayout时会非常棘手。这是你的电话。在你
PrintContentViewController
,我最显著的变化是使用标准的视图控制器场景配置(其中顶层视图是UIView
),和我做了UIScrollView
的一个子视图。话虽如此,我认为你不需要UIScrollView
的UIView
子视图(如果你有中间的UIView
,你会失去一些滚动视图的功能,这是有问题的),所以我删除了它,并制作了所有的标签等滚动视图本身的子视图。-
您使用的容器看法所有的地方,但它给我的印象,你要添加复杂的程度这是不必要的。 (而且,顺便说一句,你不会有在你原来的问题提出的问题,如果你没有使用这些容器的观点。)当你想抽象与相关的逻辑
定制容器是非常有用的容器视图控制器从其子视图控制器。但你在这里没有这样做。更糟糕的是,您正在经历各种旋转以抓取子控制器的
IBOutlet
引用并更新容器控制器中的属性。我衷心鼓励您重新考虑您对这些容器视图的使用,并完全从您的项目中删除它们。如果你对容器视图有一个引人注目的需求,可以很好地使用它们(我爱它们并且一直使用它们),但是在这里我没有看到它的任何需要,而且你让生活更加美好为自己复杂。
另外,顺便说一下,嵌入segue的使用仅限于iOS 6功能,如果您需要iOS 5向后兼容性,则可能会出现问题。
底线,我从来没有能够重现您的问题,当创建一个新的项目和镜像你的故事板。我也无法通过对旧的PrintViewController
和PrintContainerViewController
场景进行任何编辑来消除您的问题。当我重新创建这些场景时,我只能修复它,而当我这样做时,它才起作用。
我在那里留下了你的旧场景(用“旧”表示故事板不会混淆),所以也许你可以花时间弄清楚什么是错误的,但我没有看到它。也许在故事板中有一些错误可以逃避我。也许有一些设置我没有看到。我所知道的是,当我刚刚重新创建它时,将控制器复制到我的两个新场景中,它才起作用。
就我个人而言,我建议切开Gordian结,然后完全消除容器视图。你的代码会更干净,而这些问题不太可能导致他们丑陋的头脑。
这不是一个令人满意的结论(不知道是什么导致了问题),但至少它似乎是固定的。祝你好运。
我现在对你有一点不值得关注的爱。我真的很惊讶,你会花一天的时间来帮助我,因为你的帮助,积极和正式的答案是不够的。根据你的建议,我没有和嵌入式Segue结婚,但我似乎无法在视图之上拖出另一个视图来模仿嵌入式Segue外观。你会推荐什么?有没有什么好的资源可以让我指点一般,告诉我? – Pinwheeler 2013-04-14 15:31:47
@Pinwheeler我不确定你的意思。考虑使用'PrintViewController'场景,只需从该场景中删除容器视图,拖出容器视图的滚动视图,适当调整大小,将其他场景的控件剪切并粘贴到新的滚动视图中。一旦你这样做了,你可以删除那些手动设置所有这些属性的代码,'PrintViewController'就像故事板一样被大大简化,并且你完全消除了'PrintContainerViewController'。看到我上面的项目的“no-custom-container”分支。 – Rob 2013-04-14 17:48:43
查看https://github.com/robertmryan/ChiroMatic/tree/no-custom-container – Rob 2013-04-14 17:54:25
您可能需要澄清一下,或许告诉我们你是如何创建这些视图(IB或编程),不管你是使用自动布局或不,当你在'viewDidLoad'研究这些'frame'值(例如或'viewDidAppear',前者往往为时过早如果视图创建过程)等 – Rob 2013-04-10 01:31:55
因此编辑好的先生(这个评论是否必要,或者您是否在我编辑它时收到通知?) – Pinwheeler 2013-04-10 02:21:26
虽然它有点神秘,但如果你想要查看层次结构的完整描述,可以在'viewDidAppear'中放置一个断点,然后在调试器中输入以下命令:'po [[UIWindow keyWindow] recursiveDescription]'。这会向您显示完整的视图层次结构。无论如何,回到你原来的问题,根据你迄今共享的内容来诊断到底发生了什么是不可能的。也许你可以压缩你的项目并上传到某个地方让我们看看它。 – Rob 2013-04-10 02:33:55