当以编程方式设置提示时,UINavigationBar与UITableView重叠

我有一个包含UITableViewControllerUINavigationController 。 这个导航控制器将周围的其他UITableViewControllers,最终这些表视图控制器将有一个提示。

问题是,当我以编程方式设置此提示时,它将与其下方的表视图的内容重叠。

在这里输入图像说明

(search栏正在被导航栏隐藏)

我正在四处寻找,并find了答案 。 我在受影响的视图控制器中以两种不同的方式尝试了这个build议,但没有任何改变:

 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; } 

同样的答案中的评论与苹果指南有关,防止意见互相重叠。 问题是UITableViewController似乎没有顶部/底部的布局指南,所以我不能创build一个约束( 另一个SO回答说,表视图控制器中的布局是无关紧要的)。

因此,我用尽了所有的select。 任何帮助将不胜感激。

我试图重现你的问题,似乎并不是所有的viewControllers都有一个提示navigationBar不知何故调整不正确。

看来你需要以某种方式触发UINavigationController的布局。 唯一的办法,我可以使它正常工作是通过添加这viewWillAppear:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES]; [self.navigationController setNavigationBarHidden:NO]; } 

也许这个提示是为了在整个应用程序中一致地使用(意味着对于所有的viewControllers都没有,或者没有),这就是为什么UINavigationController在它改变的时候没有布置它的子视图。

希望这也适用于你。

从文档大纲中select您的TableViewController,并在属性检查器中将该值更改为顶栏的半透明导航栏。 确保你不会selectuitableview你应该从文档大纲中select你的表视图控制器(aka文件的所有者)。

你必须设置提示只有视图确实出现,那么它的工作原理:

  override func viewDidAppear(_ animated: Bool) { navigationItem.prompt = "your prompt here" }