当栏位置为 UIBarPositionTopAttached 时,UIToolbar 阴影不会隐藏

Posted

技术标签:

【中文标题】当栏位置为 UIBarPositionTopAttached 时,UIToolbar 阴影不会隐藏【英文标题】:UIToolbar shadow doesn´t hide when bar position is UIBarPositionTopAttached 【发布时间】:2015-04-15 21:39:26 【问题描述】:

我有一个包含两个视图和一个工具栏的容器视图。在ContainerViewController 中,我使用此代码(来自 Apple 的库)“停用”了导航栏的阴影:

[self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"TransparentPixel"]];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Pixel"] forBarMetrics:UIBarMetricsDefault];

我还实现了UIToolbarDelegate 及其方法

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar 

    return UIBarPositionTop; //or return UIBarPositionTopAttached;

但工具栏的阴影仍然在导航栏和工具栏之间,而不是在工具栏下方,以将工具栏与内容分开。

任何想法为什么阴影不会改变?或者如何检查工具栏位置是否真的是TopAttached。

编辑:

我尝试做类似这篇文章中描述的事情:UISegmentedControl below UINavigationbar in ios 7 没有搜索栏。 正如那里所解释的,有两个阴影,一个是导航控制器中的导航栏,位于导航栏和工具栏之间。和工具栏的阴影。 如前所述,我能够停用导航栏的阴影。它也适用于viewDidLoad:

但是工具栏的阴影位置不对。使用positionForBar: 方法,它应该位于工具栏的按钮中,但它仍位于顶部(在导航栏和工具栏之间)。

所以我正在寻找故障,为什么它没有改变。

【问题讨论】:

你想用什么方法改变阴影? 【参考方案1】:

您没有指定您尝试更改阴影的方法,但我猜您正在尝试在 viewDidLoad: 中执行此操作

viewDidLoad 中实际上并不存在您的navigationBar,而是像这样更改viewWillAppear: 中的阴影:

-(void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"TransparentPixel"]];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Pixel"] forBarMetrics:UIBarMetricsDefault];     

【讨论】:

以上是关于当栏位置为 UIBarPositionTopAttached 时,UIToolbar 阴影不会隐藏的主要内容,如果未能解决你的问题,请参考以下文章

添加和删​​除视图时出现问题

UIView.animate 和完成问题

Alfred for Mac如何创建第一个workflow

无法将 UISearchController 搜索栏添加到导航栏中,并且未调用委托方法

如何将屏幕位置转换为等距位置

Android 位置服务:我可以为 GPS 和网络位置使用单个位置侦听器吗?