等高导航栏

时间:2017-05-31 16:08:12

标签: ios uinavigationcontroller

我的应用中有两个页面:一个嵌入UINavigationController而另一个不嵌入。 UINavigationController中没有的页面有UINavigationBar我拖入并将其提示设置为空字符串以稍微增加其高度。但是,这会导致它比嵌入在UINavigationController中的页面略高。这是一个并排的图片:

pic

如果我在左页导航栏上设置了提示,则它的高度会变得太高。当我去故事板检查员时,我看到它的高度应该是74:

pic2

是否有人知道如何人为地将页面上的栏嵌入UINavigationController与{1}}相同的高度?

5 个答案:

答案 0 :(得分:7)

对于手动添加UINavigationBar的其他人(即不通过嵌入UINavigationController内),这种情况很常见。

通用UINavigationBar的高度为44分

问题是manually added UINavigationBar之上的20分差距。

在嵌入版本的情况下,间隙(假设它存在)与UINavigationBar具有相同的背景颜色。添加提示后,它会向上扩展30个点。所以现在你有74分,而不是20 + 44 = 64分。 embedded UINavigationBar有64分。因而相差10分。出于同样的原因,在space上添加“”(embedded UINavigationBar)会导致高度高于74 points

我认为您最好的选择是将其他ViewController嵌入new UINavigationController。 iOS非常聪明,可以将其视为只有一个NavigationController,而不是两个extra UINavigationController。用户不会遇到任何差异。对于程序员,如果需要以编程方式查找second ViewController,则需要考虑import time import random info = """welcome to contest!.. pls answer question as quick as possible you can pls enter small letter...\n""" print(info) questions = {"2 * 2 ?":"4", "what is the capital city of turkey?":"ankara", "what is the king of jungle?":"lion", "what is the meaning of book in turkish language?":"kitap", "who is the foundation of turkish government":"atatürk", "what is the most popular drink in turkey?":"raki", "pls tell us a hero as comic":"temel"} correct = 0 wrong = 0 blank = 0 current_time = time.time() #system time allowed_time = 25 #total time to reply the question for i in random.sample(list(questions), 5): question = questions[i] if time.time() < current_time+allowed_time: answer = input("1. soru --> {} : ".format(i)) if answer == question: correct += 1 elif answer == "": blank += 1 else: wrong += 1 print() print("right answer :", correct) print("wrong answer :", wrong) print("blank answer :", blank)

答案 1 :(得分:1)

我能够回答我自己的问题。

我只是以编程方式更改了自定义UINavigationController子类中的高度:

override func viewDidAppear(_ animated: Bool) {
    let bounds = self.navigationBar.bounds
    self.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: 74)

}

答案 2 :(得分:1)

尝试在UINavigationBar中为高度等于64放置约束。 storyboard capture

答案 3 :(得分:1)

Navigartionbar具有相同的常量大小44.您可以嵌入它或使用自定义导航。请查看下图。

这里我在第一个和第二个嵌入式导航是自定义的。没有高度问题。

答案 4 :(得分:0)

虽然你已经回答了你的问题,但是AFAIU的高度差是在一个案例中提示但不在另一个案例中的结果。那么使用UINavigationItemprompt内的ViewController添加空字符串UINavigationController会出现什么问题,例如:

self.navigationItem.prompt = "";

如果UINavigationController中有许多视图控制器,并且不希望在每个视图控制器中明确设置提示,则可以使用UINavigationControllerDelegate willShowdidShow事件来设置它在所有儿童控制器的一个地方。

这应该比您的方法更可靠,因为导航栏高度在所有设备和所有设备方向上实际上并不相同(AFAIR iPad纵向和横向不同),而且Apple可以在iOS版本之间进行更改。