如何删除出现在其他选项卡上的白色顶部空间(UITabBarController)

Posted

技术标签:

【中文标题】如何删除出现在其他选项卡上的白色顶部空间(UITabBarController)【英文标题】:How to remove white top space that appears on tab in others (UITabBarController) 【发布时间】:2017-01-30 14:48:44 【问题描述】:

我正在使用 Mono 开发 Xamarin Studio,但您可以使用 Obj-C 或 Swift 进行响应,我不介意。 (请不要介意屏幕截图上的图标、设计、翻译等,这是 WIP)

我有一个无法解决的奇怪问题:

在UITabBarController 中的UIView 的顶部栏下方出现一个白色空白区域,起初我以为它启用了“调整滚动视图插图”选项,但事实并非如此。我还尝试删除我的 UIWebView 并尝试使用标签,同样的问题。

空白区域仅出现在我的 UITabBarController 的“其他”部分中的“选项卡式”视图上(当屏幕太小时)。您可以在 iPad 上的屏幕截图中看到空白不在这里,但在其他所有设备(iPhone、iPhone plus)上都会出现!

如果设备不是 iPad,我可以设置一个负面的顶部约束,但它不是删除它的正确方法...

你可以找到(按顺序)的截图:

故事板视图 WebView 的顶部约束 iPhone 上的空白(而不是 iPad 和 Storyboard,不应该在这里!!) 故事板结构 iPad 上没有空格(这是正常行为,我也希望在较小的设备上使用) ViewController 参数

【问题讨论】:

你没有时间评论你的1000个截图是什么吗?也许画一条线,你的问题是什么,以拯救那些会帮助你一些时间尝试将你的解释转化为图像的人? @Sneak 你好,如你所见,每个截图上面都有描述,我试着让它更明显。我的问题是出现在“其他”(在 TabBar 中)部分中的每个视图的顶部栏下方的空白 您是否尝试过取消选择“Extent edges - Under Top Bars”?此外,您可以尝试检查您是否设置了 navigationController.navigationBar.translucent = YES ,如果这解决了您的问题。我会更新为答案,所以你可以标记为已回答,让我知道 @Sneak 为了让空白消失,我不得不取消选中“Extent edges - Under Top Bars”,但是导航栏是灰色的,所以我不得不做 NavigationController.NavigationBar.Translucent = false;但我发现那个空白是什么看我的回答 好的,基本上你的回答是我写了什么? 【参考方案1】:

从视觉上看,空白区域正是导航栏,这是一个赠品,在调整这些栏时会出现问题。

您的布局中存在矛盾,这可能是问题的根源。您为地图视图选择了“延伸边缘”,但地图视图的顶部被限制在顶部布局指南中。顶部布局指南位于导航栏的底部,因此,如果某些东西正在调整插入以使其位于栏下方,并且知道栏的高度并假设它位于栏下方,那么就会出现这种情况。

这并不能解释为什么当它包含在标签栏的初始视图控制器中时它看起来是正确的,但是当它从更多弹出窗口中出现时是可能的,它被添加到视图层次结构中的速度如此之快以至于它不知道确切的顶部布局指南或顶部栏的位置,因此会导致故障,而在选项卡栏控制器选项卡中,它会在多个布局通道之一上进行调整。

【讨论】:

【参考方案2】:

谢谢你的回答,我知道那个空白是什么了。

如果我想删除它,我必须取消选中“Extent edges - Under Top Bars”,然后执行(否则 NavigationBar 将变为灰色,请参阅 Dark shadow on navigation bar during segue transition after upgrading to Xcode 5.1 and ios 7.1):

NavigationController.NavigationBar.Translucent = false;

但为了解决这个问题,我尝试了以下代码:

ParentViewController.NavigationController.NavigationBar.Translucent = false;

空白区域变成了第二个导航栏,带有重新组织选项卡的工具,无需取消选中“Extent edges - Under Top Bars”(特别是如果您没有将 tranlucent 设置为 false,因为第二个导航栏会往下走)。

我会保留第二个 NavigationBar (https://developer.apple.com/reference/uikit/uitabbarcontroller/1621183-morenavigationcontroller),我喜欢它。但是由于某种原因,直到我将 ParentViewController NavigationController NavigationBar Translucent 设置为 false 才显示出来......我真的不明白为什么,它应该直接出现但是......

请注意,如果默认情况下不显示此 NavigationBar,则显示此 NavigationBar 的正确方法是在 UITabBarController 类中添加该行,而不是在每个 ViewController 中...

public partial class TabBarController : UITabBarController

    public TabBarController(IntPtr handle) : base(handle)
    
    

    public override void ViewDidLoad()
    
        CustomizableViewControllers = null; //if you want to disable the edit button
        NavigationController.NavigationBar.Translucent = false;
        base.ViewDidLoad();
    

(对不起,我的设备是法语的屏幕截图中的法语..)

【讨论】:

以上是关于如何删除出现在其他选项卡上的白色顶部空间(UITabBarController)的主要内容,如果未能解决你的问题,请参考以下文章

移动模式下我的网站封面图片上出现白色模糊。我怎么能删除它?

页面刷新和多个选项卡上的 Vuex 状态

NavigationView 顶部的额外空间

UIView 上的顶部空间约束,而不是 UIImag

如何设置表格视图单元格之间的空间并删除背景内容视图的白色

如何在选项卡栏控制器中更新选项卡上的视图