1

我在这里可能有一个奇怪的 VC 结构,我只是让它有点陌生,导致它崩溃

UIViewController (contains->) UIContainerView (embeds ->) UIScrollView (contains ->) 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 创建的
  • 不使用 AutoLayouts(虽然这听起来很有趣)
  • NSLog 方法在视图层次链顶部的视图控制器中的 ViewDidAppear 中调用。(也许这就是问题所在?)

编辑:将项目上传到 github,以便人们可以看看 https://github.com/Pinwheeler/ChiroMatic.git

4

1 回答 1

2

我花了很多时间浏览您的项目,但令人沮丧的是,我无法推断出导致问题的原因。但我发现我可以通过重新创建你的场景PrintViewControllerPrintContentViewController场景来解决问题(我必须重新创建两者来解决问题)。我为您的项目创建了一个分支并修复了这两个场景。我尝试在源代码和 git 存储库提交注释中注释我的更改,因此希望您能遵循我所做的更改。我的叉子可在:

(当您希望我删除该存储库时让我知道。我很乐意随时删除它,因为我假设您不希望我无限期地在 github 上留下副本。)

几点观察:

  1. 你说你没有使用自动布局,但你是。(转到Document Inspector情节提要上的第一个选项卡,您会看到“使用自动布局”被选中。)如果您想使用它很好(它现在是 Xcode 中的默认设置),但请注意您将失去对 iOS 版本的向后兼容性如果您使用它,则在 iOS 6 之前。自动布局很强大,但是当您第一次开始使用它时可能会很棘手。这是你的电话。

  2. 在您的PrintContentViewController中,我最重要的更改是使用标准视图控制器场景配置(其中顶级视图是 a UIView),并且我制作了它的UIScrollViewa 子视图。话虽如此,我不认为你需要的UIView子视图UIScrollView(如果你有那个中间,你会失去一些滚动视图功能,这是有问题的UIView),所以我删除了它,并制作了所有的标签和类似的子视图滚动视图本身。

  3. 您到处都在使用容器视图,但令我震惊的是,您正在增加不必要的复杂性。(顺便说一句,如果您不使用这些容器视图,您就不会遇到原始问题中提出的问题。)

    当您想从其子视图控制器中抽象出与容器视图控制器相关联的逻辑时,自定义容器非常有用。但你不是在这里这样做。更糟糕的是,您将通过各种方式来获取IBOutlet子控制器的引用并更新容器控制器中的属性。我衷心鼓励您重新考虑使用这些容器视图,并将它们完全从您的项目中删除。

    如果您对容器视图有迫切的需求,请使用它们(我喜欢它们并且一直使用它们),但我认为这里没有任何需要,而且您自己的生活变得更加复杂。

    另外,顺便说一句,使用嵌入 segue 只是 iOS 6 的一项功能,如果您需要向后兼容 iOS 5,这可能是个问题。

最重要的是,在创建新项目和镜像故事板时,我永远无法重现您的问题。PrintViewController我也无法通过对您的旧场景和场景进行任何编辑来消除您的问题PrintContainerViewController。我只有在重新创建这些场景时才能修复它,而当我这样做时,它就起作用了。

我把你的旧场景留在那里(以“旧”开头,这样故事板就不会混淆),所以也许你可以花时间找出问题所在,但我看不到。也许故事板中有一些错误正在逃避我。也许有一些我没有看到的设置。我所知道的是,当我刚刚重新创建它时,将您的控件复制到我的两个新场景中,它就可以正常工作。

就我个人而言,我建议打破僵局,完全消除容器视图。你的代码会更干净,这类问题不太可能引起他们的丑陋。

这不是一个令人满意的结论(不知道是什么导致了问题),但至少它看起来是固定的。祝你好运。

于 2013-04-14T00:44:58.260 回答