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

标签 ios autolayout

我使用自动布局在 viewDidAppear 方法中添加了一个 View 。最后 viewDidAppear 试图找到我添加的 View 高度,我得到零?

我添加的那个 View 有一个标签,该标签的高度是动态的

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

最佳答案

声明您的标签并查看为全局变量,例如

var viewToShowIn = UIView()
let bannerView = UIView()
let label = UILabel()

然后在 viewDidAppear 中设置约束或 viewDidLoad
    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() 中获得 View 或标签的高度或 viewDidLayoutSubviews()方法
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // GET YOUR HEIGHT HERE
}

关于ios - 获取自动布局添加的uiview高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168680/

相关文章:

ios - 自动布局/砌体中心多个 View

iphone - Autolayout - 拉开 super View ?

ios - iOS Quartz 2D 中的线性化 PDF?

c# - 如何在 iOS 上的 Unity3d 中获取 "free"内存量?

ios - 为什么 Core Data 并发调试工具会导致我的 iOS 应用程序崩溃?

ios - 添加和删​​除某个 UITableViewCell 下面的 UITableViewCell

ios - UICollectionViewCell 并排

ios - addChildViewController 和 subview 的自动布局

ios - 自动版面配置和最低ios版本

ios - 使用 AutoLayout 获取 UILabel 宽度很热门吗?