UINavigationBar.appearance().translucent会创建一个大的白色空间。

5

更新2: 我仍然希望能够得到一些关于此问题的帮助,因此我现在将问题进行了细化。

我的 UIViewController 层次结构如下图所示:

enter image description here

如果用户触摸筛选图标并选择升降机类型,则会出现筛选视图。左侧的图像是没有选择筛选器时的样子,右侧的图像是选择了筛选器后的样子。我正在尝试设置的是导航区域(用绿色方框标出)的样式。

enter image description here

这是我无法弄清楚的事情。如果我添加这两个内容:

UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barTintColor = UIColor(hexString: "232B35")

然后,在导航区域和筛选视图之间会出现一个空白的区域:

enter image description here

如果我将 translucent 属性设置为 true,则不会出现该白色空间,但是 barTintColor 将没有效果。
请注意,我没有在我的 UIViewController 中放置 UINavigationBar。我只有一个使用代码添加的 UINavigationItem
此时,我的问题是 - 为什么当我在代码中使用 UINavigationBar.appearance ().translucent = false 时,这个大的白色空间从哪里冒出来了(我该如何摆脱它,但是仍然改变我的导航区域的颜色)?
我真的被卡住了,希望能得到一些帮助。谢谢!
以下是我原始的问题及信息,可能或可能不会有所帮助: 我正在尝试对我的应用进行样式设计,但是做得很困难。在一个 UIViewController 上,我有一个 ThemeManager 的 struct,其中有一个应用主题的函数,在该方法中,可以让导航栏与应用的背景颜色融为一体:
static func applyTheme(theme: Theme) {

    // set the background color
    sharedApplication.delegate?.window??.backgroundColor = UIColor(hexString: "232B35")

    UINavigationBar.appearance().translucent = false // these are the offenders
    UINavigationBar.appearance().barTintColor = UIColor(hexString: "232B35")


    // first, set backgroundimage to nothing
    UINavigationBar.appearance().setBackgroundImage(
      UIImage(),
      forBarPosition: .Any,
      barMetrics: .Default)

    // and also set shadowimage to nothing
    UINavigationBar.appearance().shadowImage = UIImage()

    UIStatusBarStyle.LightContent
    UILabel.appearance().textColor = UIColor(hexString: "768DAA")
    }
  }

我的初始ViewController看起来像我想要的 - 背景和导航组件颜色相同:

enter image description here

但在另一个视图控制器上,它有这个我不想要的大空间:

enter image description here

我已经发现是UINavigationBar.appearance().translucentUINavigationBar.appearance().barTintColor属性导致了这种情况。好像它在实际导航区域下面添加了一个UINavigationBar。如果我注释掉那段代码,当然就没有颜色了,但我不想要的大空间也消失了:

enter image description here

两个VC之间的最大区别是:在第一个VC中,我通过storyboard故意放置了一个UINavigationBar,但在第二个VC中我没有。我只在那个VC中放置了一个UINavigationItem。还要注意的是,第二个VC包含一个UITableView,但它不是一个UITableViewController

如何在导航区域获得我想要的纯色,而不添加这个不需要的空间呢?

编辑#1 以下是存在问题的UIViewController的另一种视图:

enter image description here

请注意,层次结构是具有@IBOutlet连接的UIView,下面是包含过滤器视图(一个UIView)的UIStackView,该视图通过高度布局约束展开和折叠,以及一个UITableView。因此,出现的大白色空间甚至不在我的层次结构中。

如果有帮助的话,这是Lift Log的UIViewController中的viewDidLoad方法:

class LiftLogViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate {

//MARK: IB outlets

  @IBOutlet var tableView: UITableView!
  @IBOutlet weak var navItem: UINavigationItem!
  @IBOutlet weak var filterViewHeightConstraint: NSLayoutConstraint!
  @IBOutlet weak var clearFilterButton: UIImageView!
  @IBOutlet weak var selectedFilter: UILabel!
  @IBOutlet weak var clearButtonHeightConstraint: NSLayoutConstraint!
  @IBOutlet weak var clearButtonView: UIImageView!

  let coreDataStack = CoreDataStack()
  var liftEvents = [LiftEvent]()
  var isFilterViewOpen = false

  override func viewDidLoad() {

    let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: #selector(self.dismissLog(_:)))

    let filterImage = UIImage(named: "filter_icon")
    let filterButton = UIBarButtonItem(image: filterImage, style: .Plain, target: self, action: #selector(self.actionFilter))

    self.navItem.rightBarButtonItems = [doneButton, filterButton]

    let buttonTap = UITapGestureRecognizer(target: self, action: #selector(self.clearFilter))
    clearFilterButton.addGestureRecognizer(buttonTap)

    filterViewHeightConstraint.constant = 0.0
    clearButtonHeightConstraint.constant = 0.0

    super.viewDidLoad()
  }

你的Lift Log VC包含TableView吗? - Bista
@Mr.UB,是的,它确实有。看一下我对问题所做的编辑,你会看到更多关于那个的细节。 - Jim
1个回答

0

你是否通过故事板将第一个视图控制器的UINavigationBartranslucent属性设置为false,以便与你的UINavigationBar.appearance()保持一致?

enter image description here

然后你的第二个VC Top Bar 应该从第一个VC中推断出来。

enter image description here


嗨,Zac,我没有注意到,但是既然你指出来了,我确保它们现在是一致的。不幸的是,这并没有改变行为。我不确定你是否注意到了,但是我的第二个VC没有UINavigationBar。我不认为它能从第一个VC的UINavigationBar中推断出任何信息。请查看我在问题中添加的其他信息。 - Jim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接