自定义 UIView 作为 navigationItem 标题
Custom UIView as navigationItem title
我想创建简单的自定义视图并将其用于 navigationItem.titleView。我的自定义视图非常简单,只有图像视图和标签:[图像]-[标签]。我有 xib 文件,我在其中定义了所有约束(两个子视图都对超级视图有约束 - 我想子视图的高度和宽度确定整个自定义视图的高度和宽度)。问题是当我像这样从 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
}
此视图的大小不是由它 children 决定的。它具有在 Interface Builder 中手动设置的大小。我该怎么做才能强制视图动态计算大小?
在您的自定义视图中,覆盖 layoutSubviews 方法并添加:
CGSize targetSize = [self systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
从中创建一个 CGRectFrame 并将此框架设置为自己的新框架(这是自定义视图)。
这基本上会找到尽可能小的框架,该框架仍以显示所有内容的方式包含其内容。
注意:此自定义视图的所有子视图都必须正确设置自动布局压缩阻力。 IE。他们必须抵抗萎缩。
我想创建简单的自定义视图并将其用于 navigationItem.titleView。我的自定义视图非常简单,只有图像视图和标签:[图像]-[标签]。我有 xib 文件,我在其中定义了所有约束(两个子视图都对超级视图有约束 - 我想子视图的高度和宽度确定整个自定义视图的高度和宽度)。问题是当我像这样从 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
}
此视图的大小不是由它 children 决定的。它具有在 Interface Builder 中手动设置的大小。我该怎么做才能强制视图动态计算大小?
在您的自定义视图中,覆盖 layoutSubviews 方法并添加:
CGSize targetSize = [self systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
从中创建一个 CGRectFrame 并将此框架设置为自己的新框架(这是自定义视图)。
这基本上会找到尽可能小的框架,该框架仍以显示所有内容的方式包含其内容。
注意:此自定义视图的所有子视图都必须正确设置自动布局压缩阻力。 IE。他们必须抵抗萎缩。