带有UIScroller的Autolayout在3.5英寸设备上不起作用

我遇到了Auto Layout iOS7应用程序的问题。 它有一个滚动条和一个UINavigationController。 当我在3.5英寸的设备上运行它时,UINavigationController的顶部栏“抢断”空间,并且我的布局的底部从设备的底部渲染出来,它不会被导航栏的高度裁剪,我可以显示或隐藏这个问题依然存在。

这里是4.0“版本:

在这里输入图像描述

这里是破碎的3.5“

在这里输入图像描述

这是我的观点的结构:

在这里输入图像描述

最外面的视图包含一个TPKeyboardAvoidingScrollView,一个可从https://github.com/michaeltyson/TPKeyboardAvoiding获得的方便的UIScrollView子类,可让您轻松管理显示和隐藏键盘。 里面是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问题,我想我已经尝试了所有的东西,但显然我没有。

我怎样才能让这个相当简单的UI为3.5“和4”iOS7设备工作?


得到它了!

只需将viewDidLoad中的上面3行移动到viewDidAppear,它就可以完美地工作。

我从伦勃朗问题中得出了这个结论。在我的UIScrollView中,爱因斯坦对chandan答案的评论在ios6中不适用于自动布局

只是为了澄清这个原因:Autolayout在-layout中使用它的魔法在viewDidLoad之后但在ViewDidAppear之前发生的子视图 - Rembrandt Q. Einstein

链接地址: http://www.djcxy.com/p/91591.html

上一篇: Autolayout with UIScroller doesn't work on 3.5" device

下一篇: Auto layout constraints issue on iOS7 in UITableViewCell