UINavigationItem 标题视图的框架
Posted
技术标签:
【中文标题】UINavigationItem 标题视图的框架【英文标题】:Frame for UINavigationItem Title View 【发布时间】:2017-04-26 15:39:32 【问题描述】:我想复制 ios 消息的标题栏标题视图在应用程序中的行为方式。 (特别是它在后退按钮和信息按钮之间动态调整内容的位置)。
我的方法是在一个 nib 中创建一个自定义视图来保存我的可视元素数据,并将这些视图放在一个堆栈视图中,然后使该堆栈视图成为我导航项的自定义标题视图。
在堆栈视图上使用子视图 init 会产生一个结果,该结果只是将它的每个子视图叠加在一起。使用帧初始化器会为其提供一个静态帧。
我想尝试获取条形按钮项的框架,但如果可用的话,我想要一种更无缝、自动布局风格的实现方式。
我希望它能够成为每个条形按钮项目之间的最大宽度。
这就是我现在正在使用的(来自viewDidAppear
):
let frame = CGRect(x: 0, y: 0, width: 40, height: 58)
let aView = ConversationPartyView(frame: frame)
aView.avatar.backgroundColor = UIColor.gray
aView.name.text = "Kirk"
let bView = ConversationPartyView(frame: frame)
bView.avatar.backgroundColor = UIColor.red
bView.name.text = "Spock"
let stack = UIStackView(arrangedSubviews: [aView, bView])
stack.axis = .horizontal
navigationBar.topItem?.titleView = stack
【问题讨论】:
【参考方案1】:使用UIStackView
时,您不再可以控制视图的框架。相反,您的 View 类应该覆盖 intrinsicContentSize
以证明其内容的大小合适,而 UIStackView 将处理其余部分。
您也可以根据需要调整UIStackView
distribution
和spacing
。
【讨论】:
我明白你在说什么,但是当我给它的 frame 属性一个值时,堆栈视图似乎表现正确,我认为我的问题是需要为堆栈视图本身获取一个动态框架。至少要足够宽以占据栏按钮项之间的空间。 啊,我想看看你在问什么。您的 StackView 不是替换导航栏,而是替换为 titleView。并且您希望它根据条形按钮和旋转水平调整其框架? 就是这样。以上是关于UINavigationItem 标题视图的框架的主要内容,如果未能解决你的问题,请参考以下文章
为 UINavigationItem 的 titleView 设置视图控制器
推送新视图时 UINavigationItem TitleView 崩溃
UINavigationController 和 UINavigationItem