当以编程方式设置提示时,UINavigationBar与UITableView重叠
我有一个包含UITableViewController
的UINavigationController
。 这个导航控制器将周围的其他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" }