2016-08-29 5 views
4

UPDATE 2: Я все еще надеюсь получить некоторую помощь с этой проблемой поэтому я собираюсь уточнить мой вопрос немного теперь, когда я сузили его лучше.UINavigationBar.appearance() полупрозрачный создает большое белое пространство

Моя UIViewController иерархия выглядит следующим образом:

вид

enter image description here

Фильтр появляется, если пользователь прикасается значок фильтра и выбирает тип подъема. Изображение слева - это то, на что он похож, без выбранного фильтра, и правильное изображение выглядит так, как будто выбран фильтр. Область навигации (выделенная зеленым цветом) - это то, что я пытаюсь создать.

enter image description here

Вот, что я просто не могу понять. Если добавить эти две вещи:

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

то белое пространство появляется между областью навигации и вид фильтра:

enter image description here

Если установить полупрозрачный свойство верно, что белое пространство Безразлично '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 похоже, что я хочу его - предпосылки и навигационных компонентов, которые имеют тот же цвет:

enter image description here

Но на другой контроллер зрения, он получил это большое пространство, что я не хочу:

enter image description here

И я понял, что это UINavigationBar.appearance().translucent и UINavigationBar.appearance().barTintColor свойства, которые вызывают, чтобы это произошло. Это похоже на добавление UINavigationBar под фактической областью навигации.Если я комментирую этот код, оно не имеет цвет, конечно, но большое пространство, я не хочу, уходит слишком:

enter image description here

Большая разница между этими двумя VCs являются следующим образом: в первый VC, который выглядит как я хочу, я намеренно разместил UINavigationBar через раскадровку, но во втором VC у меня его нет. Я только разместил UINavigationItem в этом. Также обратите внимание, что второй VC содержит UITableView, но это не UITableViewController.

Как я могу получить сплошной цвет, который я хочу в области навигации, не добавляя это нежелательное пространство под ним?

EDIT # 1 Вот еще один взгляд на UIViewController с проблемой:

enter image description here

Обратите внимание, иерархия является 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() 
    } 
+0

Ваш лифтовый журнал vc содержит TableView? –

+0

@ Mr.UB, да. Взгляните на редактирование, которое я сделал на мой вопрос, и вы увидите более подробную информацию об этом. – Jim

ответ

0

Вы установили ваш UINavigationBar в первом VC translucent свойства false с помощью раскадровки, чтобы поддерживать его в соответствии с вашим UINavigationBar.appearance()?

enter image description here

Тогда ваш второй VC Top Bar следует выводя из первых ОК.

enter image description here

+0

Привет, Зак, я этого не сделал, но, поскольку вы указали это, я убедился, что они теперь последовательны. К сожалению, это не изменило поведения. Я не уверен, что вы поймали его, но мой второй VC не имеет 'UINavigationBar'. Я не думаю, что это могло бы вывести что-либо из 1-го VC 'UINavigationBar' Ознакомьтесь с дополнительной информацией, которую я добавил к моему вопросу. – Jim