使用UIScroller的Autolayout无法在3.5“设备上运行

时间:2014-04-22 21:55:55

标签: ios7 uiscrollview autolayout

我遇到了Auto Layout iOS7应用程序的问题。它有一个滚动条和一个UINavigationController。当我在3.5"设备UINavigationController的顶栏"窃取"空间和布局的底部呈现在设备的底部。它不会被导航栏的高度裁剪,我可以显示或隐藏它,问题仍然存在。

这里是4.0"版本:

enter image description here

这是破碎的3.5"

enter image description here

以下是我的观点结构:

enter image description here

最外面的视图包含一个TPKeyboardAvoidingScrollView,一个方便的UIScrollView子类,可从https://github.com/michaeltyson/TPKeyboardAvoiding获得,可让您轻松管理显示和隐藏键盘。在内部,UIView是TPKeyboardAvoidingScrollView将滚动的子视图。在里面我有一个UITableView和一个固定高度的UIView,包含一些UI小部件,并且应该保持粘在窗口的底部。

对比设置相当简单,每个外部视图都固定在前缘,后缘,顶部和底部边缘。 UITableView和"灰色"视图不是。灰色视图的固定高度为194,并固定在底部,常数为零。当然,UITableView没有固定的高度,但它固定在底部,常数为194.它们也固定在前端,后端和顶部。哦,我也做了编辑>解决了AutoLayout问题>添加缺失约束。

我在UIViewController中执行常规技巧,在ViewDidLoad中我这样做:

    self.automaticallyAdjustsScrollViewInsets = NO;
    _scrollView.translatesAutoresizingMaskIntoConstraints = NO;
    _scrollerSubView.translatesAutoresizingMaskIntoConstraints = YES;

我还填充UITableView并执行通常的可重用单元格编码。

我一直在玩AutoLayout约束,但除了看起来正确之外,它似乎没有做任何事情。当然,我有通常的"无法同时满足约束"控制台中的错误,但坦率地说,这对我没有帮助。

2014-04-22 17:31:34.856 Sample[3695:60b] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0xa35cc60 UIView:0x8f446e0.centerY == TPKeyboardAvoidingScrollView:0x8f44070.centerY>",
    "<NSLayoutConstraint:0xa35d3b0 V:|-(0)-[TPKeyboardAvoidingScrollView:0x8f44070]   (Names: '|':UIView:0xa35d270 )>",
    "<NSLayoutConstraint:0xa35d440 V:[TPKeyboardAvoidingScrollView:0x8f44070]-(0)-|   (Names: '|':UIView:0xa35d270 )>",
    "<NSAutoresizingMaskLayoutConstraint:0xa364a00 h=--& v=--& UIView:0x8f446e0.midY == + 284>",
    "<NSAutoresizingMaskLayoutConstraint:0xa365120 h=-&- v=-&- UIView:0xa35d270.height == UIViewControllerWrapperView:0xa35c550.height>",
    "<NSAutoresizingMaskLayoutConstraint:0xa365880 h=-&- v=-&- UIViewControllerWrapperView:0xa35c550.height == UINavigationTransitionView:0x8f3a7a0.height>",
    "<NSAutoresizingMaskLayoutConstraint:0xa366140 h=-&- v=-&- UINavigationTransitionView:0x8f3a7a0.height == UILayoutContainerView:0x8f353a0.height>",
    "<NSAutoresizingMaskLayoutConstraint:0xa366710 h=-&- v=-&- UILayoutContainerView:0x8f353a0.height == UIWindow:0xa12ff50.height>",
    "<NSAutoresizingMaskLayoutConstraint:0xa367100 h=--- v=--- V:[UIWindow:0xa12ff50(480)]>"
)

Will attempt to recover by breaking constraint

我现在有点不知所措。这不是一个复杂的情况,但它让我感到困惑。我已经阅读了无数的SO问题,我想我已经尝试了所有的东西,但显然我没有。

如何让这个相当简单的用户界面适用于3.5和#34;和4&#34; iOS7设备?

1 个答案:

答案 0 :(得分:0)

知道了!

只需将上面3行从viewDidLoad移到viewDidAppear,它就可以完美地运行。

我从Rembrandt Q.爱因斯坦的My UIScrollView doesn't work with auto-layout in ios6

中对chandan的回答发表评论
  

只是为了澄清它的作用原因:Autolayout发挥其神奇作用   -layoutSubviews发生在viewDidLoad之后但在ViewDidAppear之前 - Rembrandt Q. Einstein