我有UINavigationController
,其中包含UITableViewController
。该导航控制器推送其他UITableViewControllers,最终这些表视图控制器将有一个提示。
问题是,当我以编程方式设置此提示时,它与其下方的表视图的内容重叠。
(导航栏正在隐藏搜索栏)
我在SO中环顾四周,发现this answer。我在受影响的视图控制器中以两种不同的方式尝试了该建议,但没有任何改变:
override func viewDidLoad() {
super.viewDidLoad()
self.edgesForExtendedLayout = .None;
self.extendedLayoutIncludesOpaqueBars = false;
self.navigationItem.title = NSLocalizedString("Add Anime or Manga", comment: "")
self.navigationItem.prompt = NSLocalizedString("Search media belonging to this series.", comment: "")
}
-
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = NSLocalizedString("Add Anime or Manga", comment: "")
self.navigationItem.prompt = NSLocalizedString("Search media belonging to this series.", comment: "")
self.edgesForExtendedLayout = .None;
self.extendedLayoutIncludesOpaqueBars = false;
}
同一答案中的评论与this Apple guide相关联,以防止视图相互重叠。问题是UITableViewController
似乎没有顶部/底部布局指南,因此我无法创建约束(another SO answer表示在表视图控制器中表示布局是无关紧要的。)
因此我已经用尽了所有选择。
答案 0 :(得分:6)
我试图重现您的问题,但似乎并非所有viewControllers
都有提示,navigationBar
无法正常调整大小。
似乎你需要以某种方式触发UINavigationController
的布局。我能使它正常工作的唯一方法是在viewWillAppear:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES];
[self.navigationController setNavigationBarHidden:NO];
}
也许这个提示符应在整个应用程序中一致使用(意味着对所有viewControllers都有一个或者没有一个),这就是为什么UINavigationController
在更改时不会布局它的子视图。
希望这也适合你。
答案 1 :(得分:2)
从文档大纲中选择TableViewController,并将值更改为属性检查器中顶栏的半透明导航栏。请确保您不会选择uitableview,您应该从文档大纲中选择您的表格视图控制器(即文件所有者)。
答案 2 :(得分:2)
只有在视图确实出现时才需要设置提示,然后才能工作:
override func viewDidAppear(_ animated: Bool) {
navigationItem.prompt = "your prompt here"
}
答案 3 :(得分:0)
现在是2019年,但仍未修复。 慢拍手。我拒绝被这样的事情吓倒,所以我以书中最肮脏的把戏{了iOS
。我通过在-44
上放置UINavigation
到UITableView
上进行令人反感的top 44
“ y技巧”来解决此问题,我知道这很愚蠢,但是可以。肯定有新的电话手机会毁了我的天才。.但是,嘿。我懒洋洋地留下了无关的代码(因为我闲着),但希望你能看到我的所作所为。
let screenSize: CGRect = UIScreen.main.bounds
let navBar = UINavigationBar(frame: CGRect(x: 0, y: -44, width: screenSize.width, height: 44)) //<<--note minus 44
navBar.barTintColor = Globals.Color_BackgroundGrey()
navBar.isTranslucent = false
tableView.contentInset = UIEdgeInsets(top: 44, left: 0, bottom: 0, right: 0); //<--note plus 44
self.edgesForExtendedLayout = []
let navItem = UINavigationItem(title: "Boaty Mc Boatface")
let doneItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(done))
navItem.rightBarButtonItem = doneItem
navBar.setItems([navItem], animated: false)
view.addSubview(navBar)