当titleView有限制时,BackbarButtonim在iOS 10上可见
在iOS 10上有一个非常奇怪的行为。假设您有一个空的应用程序,使用主详细信息应用程序模板创建。将任何当titleView有限制时,BackbarButtonim在iOS 10上可见,ios,ipad,uisplitviewcontroller,uibarbuttonitem,ios10,Ios,Ipad,Uisplitviewcontroller,Uibarbuttonitem,Ios10,在iOS 10上有一个非常奇怪的行为。假设您有一个空的应用程序,使用主详细信息应用程序模板创建。将任何ui视图作为标题视图放置在detail viewcontroller的导航栏中。将任何ui视图放置到右栏按钮项。 然后,将该代码写入configureView方法: if let item = self.splitViewController?.displayModeButtonItem { self.navigationItem.leftBarButtonItem = item
ui视图
作为标题视图放置在detail viewcontroller的导航栏中。将任何ui视图
放置到右栏按钮项。
然后,将该代码写入configureView
方法:
if let item = self.splitViewController?.displayModeButtonItem {
self.navigationItem.leftBarButtonItem = item
self.navigationItem.leftItemsSupplementBackButton = true
}
然后配置splitviewcontrollerpreferredDisplayMode=.allVisible
,以便可以显示displayModeButtonItem
在iOS 9及更低版本上,这会导致标准行为:详细视图控制器在左侧显示displayModeButtonItem
expand按钮
当用户点击它时,图标将转换为箭头。点击箭头可反转按钮状态
在iOS 10上,displayModeButtonItem显示为展开按钮,但如果用户点击它,它就会消失
同时,按钮仍然存在,用户可以再次点击它。之后,displayModeButtonItem
再次出现,并带有展开图标和backButtonItem图标。就像我们将另一个viewcontroller推到detail的navigationcontroller上时显示的一样:
但在这种情况下,两个图标都充当displayModeButtonItem
。
这是一个iOS错误,还是一个错误配置?我可以做什么来获得正常的按钮行为
编辑:我发现,如果标题视图(RightBarButtonim的视图)不包含对其子视图的任何约束,那么一切都会按预期进行。对这件事提起诉讼
编辑2:某些控件(如UIImageView)可能会隐式添加
NSContentSizeLayoutConstraint
,因此,为了防止此行为(并防止上面的错误),请将其子类化并重写intrinsicContentSize
方法,如下所示:
private class NoConstraintsUIImageView: UIImageView {
private override func intrinsicContentSize() -> CGSize {
// prevent implicit NSContentSizeLayoutConstraint adding in updateConstraints
return CGSize(width: UIViewNoIntrinsicMetric, height: UIViewNoIntrinsicMetric)
}
}
我一直在为同一个问题挠头。只需将titleView设置为任意UIView,然后在该视图上调用setNeedsUpdateConstraints(),就会导致相同的问题。同时显示“后退”和“展开”按钮。