Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取自动布局添加的uiview的高度_Ios_Autolayout - Fatal编程技术网

Ios 获取自动布局添加的uiview的高度

Ios 获取自动布局添加的uiview的高度,ios,autolayout,Ios,Autolayout,我使用autolayout在ViewDidDisplay方法中添加了一个视图。在视图的末尾,我试图找到我添加的视图高度,我得到了零 我添加的视图有一个标签,标签的高度是动态的 let viewToShowIn = self.view! let bannerView = UIView() bannerView.backgroundColor = UIColor.red let label = UILabel() label.translatesAutoresizingMaskIntoConstr

我使用autolayout在ViewDidDisplay方法中添加了一个视图。在视图的末尾,我试图找到我添加的视图高度,我得到了零

我添加的视图有一个标签,标签的高度是动态的

let viewToShowIn = self.view!
let bannerView = UIView()
bannerView.backgroundColor = UIColor.red

let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false

viewToShowIn.addSubview(bannerView)
bannerView.addSubview(label)

let margins = viewToShowIn.layoutMarginsGuide

bannerView.translatesAutoresizingMaskIntoConstraints = false

bannerView.leadingAnchor.constraint(equalTo: viewToShowIn.leadingAnchor, constant: 0).isActive = true
bannerView.trailingAnchor.constraint(equalTo: viewToShowIn.trailingAnchor, constant: 0).isActive = true
let bannerTopConstraint =    bannerView.topAnchor.constraint(equalTo: margins.topAnchor, constant: 0)
bannerTopConstraint.isActive = true

label.font = UIFont.systemFont(ofSize: 20)
label.text = "kjafj kfj fk fjk dakjd k fdjakljf dkfjklsdjf dfsjlkj lkfsdjlkjl sjflksdjfljslf sdfljdslkjflsdjf sldfjlksj"
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.textAlignment = .center

label.leadingAnchor.constraint(equalTo: bannerView.leadingAnchor, constant: 20).isActive = true
label.trailingAnchor.constraint(equalTo: bannerView.trailingAnchor, constant: -20).isActive = true
label.topAnchor.constraint(equalTo: bannerView.topAnchor, constant: 10).isActive = true
bannerView.bottomAnchor.constraint(equalTo: label.bottomAnchor, constant: 10).isActive = true

将所有约束添加到视图后,只需调用self.view.layoutifneed()


它将强制自动布局引擎计算视图大小。

将标签和视图声明为全局变量,如

var viewToShowIn = UIView()
let bannerView = UIView()
let label = UILabel()
然后在
viewdide出现
viewdideload

    viewToShowIn = self.view!
    bannerView.backgroundColor = UIColor.red

    label.translatesAutoresizingMaskIntoConstraints = false

    viewToShowIn.addSubview(bannerView)
    bannerView.addSubview(label)

    let margins = viewToShowIn.layoutMarginsGuide

    bannerView.translatesAutoresizingMaskIntoConstraints = false

    bannerView.leadingAnchor.constraint(equalTo: viewToShowIn.leadingAnchor, constant: 0).isActive = true
    bannerView.trailingAnchor.constraint(equalTo: viewToShowIn.trailingAnchor, constant: 0).isActive = true
    let bannerTopConstraint =    bannerView.topAnchor.constraint(equalTo: margins.topAnchor, constant: 0)
    bannerTopConstraint.isActive = true

    label.font = UIFont.systemFont(ofSize: 20)
    label.text = "kjafj kfj fk fjk dakjd k fdjakljf dkfjklsdjf dfsjlkj lkfsdjlkjl sjflksdjfljslf sdfljdslkjflsdjf sldfjlksj"
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.textAlignment = .center

    label.leadingAnchor.constraint(equalTo: bannerView.leadingAnchor, constant: 20).isActive = true
    label.trailingAnchor.constraint(equalTo: bannerView.trailingAnchor, constant: -20).isActive = true
    label.topAnchor.constraint(equalTo: bannerView.topAnchor, constant: 10).isActive = true
    bannerView.bottomAnchor.constraint(equalTo: label.bottomAnchor, constant: 10).isActive = true
您将在
viewWillLayoutSubviews()或
viewdillayoutsubviews()方法中获得视图或标签的高度

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // GET YOUR HEIGHT HERE
}

您可以使用
systemLayoutSizeFitting(uuTargetSize:CGSize)
并传递
UILayoutFittingCompressedSize
(最小可能)或
UILayoutFittingExpandedSize
(最大可能)。这将返回基于当前约束的视图的最佳大小。如果宽度/高度为零,则表示未为该标注提供足够的约束。