Autolayout无效与xib中隐藏的导航栏相关

时间:2015-10-15 06:26:09

标签: ios objective-c

我正在处理与xib文件中的导航栏相关的问题。问题如下:

我添加了一个xib文件,并在其上面手动放置UINavigationBar,并使用约束使其保持在屏幕顶部。然后我在它下面添加UILabel,并使用约束使其位于导航栏下方。也就是说,let label.top等于navigationbar.bottom。然后我需要添加全屏功能。我添加了一个按钮,按下后,我按照以下代码隐藏了导航栏:

self.navbar.hidden = YES;

导航栏被隐藏,但标签仍以某种方式保持其位置,并且不会移动到屏幕的顶部,这是我期望看到的。

所以问题是:

  1. 这个效果是否正常?因为现在隐藏了导航栏,所以约束应该使标签移动到顶部。

  2. 如果正常/异常,我该怎么做才能达到我想要的效果。

  3. 谢谢你们!任何想法都可以提供帮助!

    请原谅我的英语,因为这不是我的母语。

5 个答案:

答案 0 :(得分:1)

由于您只是添加导航栏,而不是导航控制器,因此隐藏不起作用。您必须在导航栏上设置高度约束,并在控制器中设置其出口,然后在您要隐藏栏的位置,您必须将constraint.constant设置为零。

答案 1 :(得分:0)

你隐藏导航栏&设置标签的框架。

if(self.navbar.hidden){

   // set frame of lable on top aas you required ..

}
希望它对你有所帮助。

答案 2 :(得分:0)

为标签创建顶空约束和高度约束的出口,并在隐藏导航栏时更改该约束常量值,否则将其放置为先前。

示例:

@property (strong, nonatomic) NSLayoutConstraint *lblTopSpaceConstraintValue;

@property (strong, nonatomic) NSLayoutConstraint *lblHeightConstraintValue;
and write condition 

if(self.navigationBar.hidden)
{

lblTopSpaceConstraintValue.constant = 0;
lblHeightConstraintValue.constant = 0;

}

else

{

lblTopSpaceConstraintValue.constant = 10;//label topspaceconstraint value which you have given previously
lblHeightConstraintValue.constant = 21; //label height constraint value which you have given previously

}

答案 3 :(得分:0)

谢谢大家!我将导航栏的高度约束设置为零,它工作正常!你们刚刚教我很多约束,再次感谢!

答案 4 :(得分:0)

Create IBIOutlet of label top Constraint with navbar. 

    IBOutlet NSLayoutConstraint* _lblTopNavBarConstraint;

and set value as per the condition.

- (IBAction) move:(id)sender
{
    _navBar.hidden = !_navBar.hidden;
    _lblTopNavBarConstraint.constant = (_navBar.hidden) ? -20 : 20;
}