在viewDidLoad中添加NSLayoutConstraint以引用topLayoutGuide。很奇怪?

时间:2013-12-20 09:31:33

标签: ios ios7

我在Xcode 5的界面构建器中编写了一个UI。我的目标是iOS 6和iOS 7。

我有一个UINavigationController,它包含一个带有UIToolBar和UITableView的UIViewController。

为了阻止我的TableView被导航栏部分覆盖,我添加了设计时间限制,并将顶部垂直约束附加到视图。我把它设置为'占位符'。

然后,在viewDidLoad中,我添加了一个新的附加到iOS 7上的topLayoutGuide和iOS 6上的视图:

+(void)addTopConstraint:(id)topControl forController:(UIViewController *) controller withMargin:(NSInteger)margin
{
    NSMutableDictionary *views = [[NSMutableDictionary alloc] init];
    NSString *constraint;

    [views setObject:topControl forKey:@"ControlOne"];

    if( [controller respondsToSelector:@selector(topLayoutGuide)] )
    {
     [views setObject:[controller topLayoutGuide] forKey:@"topLayoutGuide"];
        constraint = [NSString stringWithFormat:@"V:[topLayoutGuide]-%d-[ControlOne]", margin];
    }
    else constraint = [NSString stringWithFormat:@"V:|-%d-[ControlOne]", margin];

    [[controller view] addConstraints:[NSLayoutConstraint    constraintsWithVisualFormat:constraint options:0 metrics:nil views:views]];
}

在界面构建器中,我在TableView上方有Toolbar对象时,它工作正常。如果我将TableView移动到ToolBar上方,它找不到顶部布局指南,我在视图顶部得到一个空的44点间隙。

界面构建器左侧控件的顺序是否有任何意义? (我正在谈论“占位符”下方的控制列表,其中视图位于控件和约束之下。

有什么想法吗?!?

0 个答案:

没有答案