UPDATE 2: Я все еще надеюсь получить некоторую помощь с этой проблемой поэтому я собираюсь уточнить мой вопрос немного теперь, когда я сузили его лучше.UINavigationBar.appearance() полупрозрачный создает большое белое пространство
Моя UIViewController
иерархия выглядит следующим образом:
Фильтр появляется, если пользователь прикасается значок фильтра и выбирает тип подъема. Изображение слева - это то, на что он похож, без выбранного фильтра, и правильное изображение выглядит так, как будто выбран фильтр. Область навигации (выделенная зеленым цветом) - это то, что я пытаюсь создать.
Вот, что я просто не могу понять. Если добавить эти две вещи:
UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barTintColor = UIColor(hexString: "232B35")
то белое пространство появляется между областью навигации и вид фильтра:
Если установить полупрозрачный свойство верно, что белое пространство Безразлично 't появляется, но тогда barTintColor не действует.
Отметьте, что I не положил UINavigationBar
в мой UIViewController
. У меня есть только 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
похоже, что я хочу его - предпосылки и навигационных компонентов, которые имеют тот же цвет:
Но на другой контроллер зрения, он получил это большое пространство, что я не хочу:
И я понял, что это UINavigationBar.appearance().translucent
и UINavigationBar.appearance().barTintColor
свойства, которые вызывают, чтобы это произошло. Это похоже на добавление UINavigationBar
под фактической областью навигации.Если я комментирую этот код, оно не имеет цвет, конечно, но большое пространство, я не хочу, уходит слишком:
Большая разница между этими двумя VCs являются следующим образом: в первый VC, который выглядит как я хочу, я намеренно разместил UINavigationBar
через раскадровку, но во втором VC у меня его нет. Я только разместил UINavigationItem
в этом. Также обратите внимание, что второй VC содержит UITableView
, но это не UITableViewController
.
Как я могу получить сплошной цвет, который я хочу в области навигации, не добавляя это нежелательное пространство под ним?
EDIT # 1 Вот еще один взгляд на UIViewController
с проблемой:
Обратите внимание, иерархия является UIView
с соединением @IBOutlet, ниже, что в UIStackView
, который содержит вид фильтра (a UIView
), который расширяется и сворачивается с ограничением макета высоты и UITableView
. Таким образом, большое белое пространство, которое появляется, даже не в моей иерархии.
В случае помогает, вот viewDidLoad
метода в Lift UIViewController
лог:
класса 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()
}
Ваш лифтовый журнал vc содержит TableView? –
@ Mr.UB, да. Взгляните на редактирование, которое я сделал на мой вопрос, и вы увидите более подробную информацию об этом. – Jim