如何获得topLayoutGuide的高度?

Alb*_*ing 27 ios swift

 moviePlayer = MPMoviePlayerController(contentURL: url)
 moviePlayer.view.frame = CGRect(x: 0, y:{layoutguide.height}, width:
 self.view.frame.width, height: 300)
 self.view.addSubview(moviePlayer.view)
Run Code Online (Sandbox Code Playgroud)

viewcontroller有一个名为"topLayoutGuide"的属性,但似乎不是我想要的.

我知道如何在storyboard 实现,在代码中,我无法获得Top Layout Guide的高度.我搜索了几个小时什么都没有.

在此输入图像描述

在此输入图像描述

下面是想要的.

在此输入图像描述

Mat*_*mbo 51

您可以将topLayoutGuide值作为其length属性:

// Inside your viewController
self.topLayoutGuide.length
Run Code Online (Sandbox Code Playgroud)

因为它是单个值(即:它没有高度和宽度),所以它们只是调用它length.同样适用于bottomLayoutGuide.

希望这可以帮助

还有一点需要注意,在这个属性的apple doc中:

//作为不使用自动布局的礼貌,这个值在-viewDidLayoutSubviews中引用是安全的,或者在调用super之后在-layoutSubviews中引用

在这两个函数中使用此属性将获得准确的值,因为布局已初始化.如果在viewDidLoad函数中使用它,则此属性将为0.

  • iOS 11 现已弃用 `topLayoutGuide` (4认同)

Mar*_*ret 25

如果有人正在寻找如何计算iOS 11可用的SafeLayoutGuide插图的高度,因为现在不推荐使用Top and Bottom Layout Guide,您可以在以下位置找到它:

view.safeAreaInsets
Run Code Online (Sandbox Code Playgroud)

请注意,Top和Bottom Layout Guide是ViewController的一部分,现在SafeLayoutGuide是ViewController主视图的一部分.

  • @CoderNinja是的,我不是说不是,而是说它们在iOS 11中已弃用。也许我的最后一句话很混乱,所以我对其进行了编辑。 (2认同)

Raj*_*r R 12

这将获得view由半透明或透明UIKit条覆盖的视图控制器部分的长度(以磅为单位)。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    var topSpace:CGFloat?
    var bottomSpace:CGFloat?
    if #available(iOS 11.0, *) {
        topSpace = self.view.safeAreaInsets.top
        bottomSpace = self.view.safeAreaInsets.bottom
    } else {
        topSpace = self.topLayoutGuide.length
        bottomSpace = self.bottomLayoutGuide.length
    }
}
Run Code Online (Sandbox Code Playgroud)