设置UINavigationItem的titleView:setFrame与Auto Layout Constraints

时间:2014-08-26 11:49:49

标签: ios ios7 autolayout nslayoutconstraint

我正在以编程方式切换到使用自动布局,所以这对我来说都是新手。作为一般规则,我认为我应该避免直接设置任何帧...

问题:我想使用UILabel作为视图控制器UINavigationItem titleView的视图。

是否可以在导航栏/导航项目中使用自动布局约束?或者,我们是否还需要在某些情况下直接设置框架?

E.g。我正在做这样的事情:

UILabel* title = [UILabel new];
title.text = @"Some Title";
[title sizeToFit];
CGFloat titleWidth = title.bounds.size.width;
[title setFrame:CGRectMake(0, 0, titleWidth, 32.0)];
self.navigationItem.titleView = title;

如您所见,我已将该视图的高度设置为32.0(对于横向模式)。此外,我允许更改标题文字,因此如果用户进行了更改,我会重新执行sizeToFitsetFrame

这是这样做的吗?或者,是否有自动布局方式?

注意:我看过这个问题/答案: Building a titleView programmatically with constraints (or generally constructing a view with constraints)

通读 - 我仍然不确定是否可以使用约束

2 个答案:

答案 0 :(得分:1)

还有一个技巧......你设置为navigationItem.titleView的视图绝不可能是translatesAutoresizingMaskIntoConstraints = false,或者它会在导航动画期间飞越整个导航栏。您还需要确保设置框架宽度和高度。

答案 1 :(得分:0)

我相信你可以。但你为什么要这样?无论如何,约束必须是:

  • 超级视图的上边距
  • 高度

从文档中,titleView在导航框架中居中,并调整大小以适应。从技术上讲,除了上述内容之外,您不需要任何其他内容,但您可能还需要为superview指定左边距。