如何将推入UINavigationViewController的视图正确调整大小?

时间:2014-10-25 10:36:46

标签: ios swift

我正在尝试以编程方式创建视图控制器层次结构(没有IB和Storyboard)。如果我使用简单的UIViewController

,事情就会很好
// My app delegate
func application(application: UIApplication, didFinishLaunchingWithOptions options: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    let vc = UIViewController(nibName: nil, bundle: nil)
    vc.view = UIView(frame: CGRectZero)
    vc.view.backgroundColor = UIColor.whiteColor()
    let label = UILabel(frame: CGRectMake(0, 0, 100, 40))
    label.text = "Hello!"
    vc.view.addSubview(label)
    vc.title = "Title"

    self.window.rootViewController = vc
    self.window.makeKeyAndVisible()
    return true
}

然后我尝试将视图控制器放在导航控制器中:

func application(application: UIApplication, didFinishLaunchingWithOptions options: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    // vc created the same way as above.

    let nav = UINavigationController(rootViewController: vc)
    self.window.rootViewController = nav

    self.window.makeKeyAndVisible()
    return true
}

标签隐藏在导航栏下方。

很明显,导航视图控制器未正确调整视图大小。我尝试设置内部vc的帧,但这没有效果,可能是因为事情是由autolayout处理的?我是否应该添加一些约束来使其在IB / Storyboard中正常工作,或者我应该以不同的方式做一些事情?

1 个答案:

答案 0 :(得分:1)

您的视图正在正确调整大小,但在iOS 8中,因为条形图可以是半透明的,默认情况下视图会在它们下面扩展。 (这就是为什么你的标签被导航栏隐藏的原因)

根据我的理解,您想要使用半透明条,但您不希望您的内容最终落在它们之下。为此,您可以编辑视图控制器的edgesForExtendedLayout属性。

vc.edgesForExtendedLayout = UIRectEdgeNone

此属性告诉您应在半透明条(左,右,上,下,全,无或任何组合)下扩展哪些边,并默认为UIRectEdgeAll。

有关更多信息,请查看documentation和此guide