自定义UIView作为navigationItem标题

时间:2015-02-09 14:46:53

标签: ios uiview interface-builder xib uinavigationitem

我想创建简单的自定义视图并将其用于navigationItem.titleView。我的自定义视图非常简单,只有图像视图和标签:[图像] - [标签]。我有xib文件,我已经定义了所有约束(两个子视图都对superview有约束 - 我希望子视图的高度和宽度决定整个自定义视图的高度和宽度)。问题是,当我像这样从xib实例化视图时:

class func titleViewWithTitle(title: String, icon: UIImage?) -> TitleView {
        let titleView = NSBundle.mainBundle().loadNibNamed("TitleView", owner: self, options: nil).first as TitleView       
        titleView.title.text = title
        titleView.icon.image = icon
        titleView.layoutSubviews()
        return titleView
    }

此视图的大小不是由其孩子决定的。它具有在Interface Builder中手动设置的大小。我该怎么做才能强制视图动态计算大小?

1 个答案:

答案 0 :(得分:2)

在自定义视图中,覆盖layoutSubviews方法并添加:

CGSize targetSize = [self     systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

从中创建一个CGRectFrame并将此框架设置为self的新框架(这是自定义视图)。

这将基本上找到仍然包含其内容的最小可能帧,以便显示所有内容。

注意:此自定义视图的所有子视图必须正确设置自动布局压缩阻力。即他们必须抵制萎缩。

相关问题