Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当titleView有限制时,BackbarButtonim在iOS 10上可见_Ios_Ipad_Uisplitviewcontroller_Uibarbuttonitem_Ios10 - Fatal编程技术网

当titleView有限制时,BackbarButtonim在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

在iOS 10上有一个非常奇怪的行为。假设您有一个空的应用程序,使用主详细信息应用程序模板创建。将任何
ui视图
作为标题视图放置在detail viewcontroller的导航栏中。将任何
ui视图
放置到右栏按钮项。

然后,将该代码写入
configureView
方法:

if let item = self.splitViewController?.displayModeButtonItem {
    self.navigationItem.leftBarButtonItem = item
    self.navigationItem.leftItemsSupplementBackButton = true
}
然后配置splitviewcontroller
preferredDisplayMode=.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(),就会导致相同的问题。同时显示“后退”和“展开”按钮。