gpt4 book ai didi

ios - UINavigationBar.appearance().translucent 正在创建一个大的空白

转载 作者:搜寻专家 更新时间:2023-10-31 21:47:27 25 4
gpt4 key购买 nike

更新 2:我仍然希望在这个问题上得到一些帮助,所以既然我已经更好地缩小了范围,我将稍微完善我的问题。

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

enter image description here

如果用户触摸过滤器图标并选择电梯类型,则会出现过滤器 View 。左边的图像是没有选择过滤器的样子,右边的图像是选择过滤器的样子。导航区域(以绿色勾勒出轮廓)是我要设置的样式。

enter image description here

这是我想不通的事情。如果我添加这两件事:

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

然后在导航区域和筛选 View 之间出现一个空白区域:

enter image description here

如果我将半透明属性设置为 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

但是在不同的 View Controller 上,它有这么大的空间,我不想要:

enter image description here

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

enter image description here

这两个 VC 之间的最大区别是:在第一个看起来像我想要的 VC 中,我有意通过 Storyboard放置了一个 UINavigationBar 但在第二个 VC 中我没有。我只在其中放置了一个 UINavigationItem。另请注意,第二个 VC 包含一个 UITableView 但它不是 UITableViewController

如何在导航区域中获得我想要的纯色而不在其下方添加不需要的空间?

编辑#1这是对有问题的 UIViewController 的另一种看法:

enter image description here

注意层次结构是带有@IBOutlet 连接的UIView,在它下面是一个UIStackView,它包含过滤 View (一个UIView)使用高度布局约束和 UITableView 展开和折叠。所以出现的大空白甚至不在我的层次结构中。

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

类 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()
}

最佳答案

您是否通过 Storyboard将第一个 VC translucent 属性中的 UINavigationBar 设置为 false 以使其与您的 UINavigationBar.appearance() 保持一致?

enter image description here

那么你的第二个 VC Top Bar 应该是从第一个 VC 推断出来的。

enter image description here

关于ios - UINavigationBar.appearance().translucent 正在创建一个大的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com