我有一个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,但是一旦收缩,视图仍然无法正确扩展。
感谢您的帮助!
答案 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;