获取navigationItem.titleView layoutSubviews的正确边界

时间:2010-02-03 20:32:11

标签: iphone objective-c cocoa-touch uinavigationitem titleview

我有一个UIView的子类,我使用以下代码行添加到titleView的{​​{1}}中:

navigationItem

够容易。这很好。我的问题是这个self.navigationItem.titleView = tempview; 有时会更新navigationItem(有时没有按钮,有时会有一个标准大小的按钮,有时会有一个更大的按钮)。

我想我可以简单地使用我添加为rightBarButton的{​​{1}}类的layoutSubviews方法,因此我将其放入:

tempview

这似乎不起作用,因为在titleView项更新时它没有正确调整titleview的大小。

我也注意到边界一旦变小就不会增长,只是改变位置。

我已尝试使用-(void)layoutSubviews { [super layoutSubviews]; self.mylabel.frame = self.bounds; } rightBarButton,但这些只是使用不正确的边界“调整大小”。

我还确保将setNeedsLayout项设置为nil,但是一旦收缩,视图仍然无法正确扩展。

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

使用

配置您的视图
[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];

(可能在initWithFrame中)

然后实施

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [self setFrame:[newSuperview bounds]];
}

现在您的视图与容器的大小相匹配,并自动调整大小。

答案 1 :(得分:2)

默认情况下,layoutSubviews不执行任何操作。你也永远不会改变titleView的大小,所以除非导航栏能为你做到这一点,否则没有任何改变就不足为奇了。

由于你只是改变其中一个子视图的大小,我不认为autoresize会起作用,因为我很确定当superview(启用了autoresizesubviews的那个)改变大小时会触发它。我建议您在更改右键时重新计算titleview的大小。如果它在第一次添加时自动适合,你可以删除并读取它,但我知道这是一个非常丑陋的黑客。

答案 2 :(得分:0)

您是否尝试过设置autoresizingMask属性而不是覆盖-layoutSubviews

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;