gpt4 book ai didi

ios - 删除单元格和导航栏之间的间隙

转载 作者:行者123 更新时间:2023-11-29 01:40:00 25 4
gpt4 key购买 nike

我实现了 ENSwiftSideMenu在我的应用程序中,(你可以只使用它提供的示例项目,因为它有同样的问题,)当我将 iPhone 旋转到纵向模式时,菜单 tableView 在导航栏之间有一个间隙和细胞

enter image description here

我发现了问题。它位于以下文件中:MyMenuTableViewController.swift

tableView.contentInset = UIEdgeInsetsMake(64.0, 0, 0, 0)

所以我用 navbar 的高度替换了 64 的高度:

override func viewDidLoad() {
super.viewDidLoad()
tableView.contentInset = UIEdgeInsetsMake(self.navigationController!.navigationBar.frame.height, 0, 0, 0) // Error
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
tableView.contentInset = UIEdgeInsetsMake(self.navigationController!.navigationBar.frame.height, 0, 0, 0)
}

当我运行该应用程序时,我在 viewDidLoad 中的代码处收到以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

第一页加载前的错误(在初始屏幕上)。我该怎么做才能解决这个问题?或者,如果有更好的方法来消除差距,请告诉我。我已经尝试在 viewDidLoad 中添加以下内容:

self.automaticallyAdjustsScrollViewInsets = true

那什么也没做。

最佳答案

好的,我一直在研究 ENSwiftSideMenu 的工作原理。看起来你的侧边菜单没有添加到导航堆栈,所以如果你调用 self.navigationController,它总是返回 nil。

此外,ENSwiftSideMenu 使用自定义导航 Controller :ENsideMenuNavigationController,它有一个名为 sideMenu 的属性,不幸的是,该属性继承自 NSObject(而不是 UIViewController)。所以基本上,我要做的就是更改 MyNavigationController 类,以便它保留对用作侧边菜单的 MyMenuTableViewController 的引用,并根据ENSideMenuNavigationController 的导航栏大小。

最后,您需要在旋转后应用侧 TableView 的 contentInset,因此您需要观察 UIDeviceOrientationDidChangeNotification 通知。

这就是 MyNavigationController 类应该如何工作:

class MyNavigationController: ENSideMenuNavigationController, ENSideMenuDelegate {

private let menuTableViewController = MyMenuTableViewController()

override func viewDidLoad() {
super.viewDidLoad()
sideMenu = ENSideMenu(sourceView: self.view, menuViewController: menuTableViewController, menuPosition:.Left)
//sideMenu?.delegate = self //optional
sideMenu?.menuWidth = 180.0 // optional, default is 160
//sideMenu?.bouncingEnabled = false

// make navigation bar showing over side menu
view.bringSubviewToFront(navigationBar)

menuTableViewController.tableView.contentInset = UIEdgeInsetsMake(self.navigationBar.frame.height + self.navigationBar.frame.origin.y, 0, 0, 0)
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
}

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}

func rotated() {
menuTableViewController.tableView.contentInset = UIEdgeInsetsMake(self.navigationBar.frame.height + self.navigationBar.frame.origin.y, 0, 0, 0)
}

// MARK: - ENSideMenu Delegate
func sideMenuWillOpen() {
println("sideMenuWillOpen")
}

func sideMenuWillClose() {
println("sideMenuWillClose")
}

func sideMenuDidClose() {
println("sideMenuDidClose")
}

func sideMenuDidOpen() {
println("sideMenuDidOpen")
}

}

关于ios - 删除单元格和导航栏之间的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508722/

25 4 0