当我将它们添加到UIKitView时,为什么我的对象会被放置并且尺寸如此完美?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我将它们添加到UIKitView时,为什么我的对象会被放置并且尺寸如此完美?相关的知识,希望对你有一定的参考价值。

所以我将以下UIKit元素添加到我的UIViewController中以控制出现的模拟。我预计必须编写大量的放置代码,但是所有设备看起来完全没有任何设备...我的问题是为什么?

let menuButton = UIButton()
let statusLabel = UILabel()
let segmentedLabel = UISegmentedControl(items: ["None", "Glow", "Cloud"])
func initializeUI() {
    //The menu button that opens up the options for the simulations
    menuButton.layer.borderColor = UIColor.lightGray.cgColor
    menuButton.layer.borderWidth = 1
    menuButton.layer.cornerRadius = 5
    menuButton.layer.backgroundColor = UIColor.darkGray.cgColor
    menuButton.showsTouchWhenHighlighted = true
    menuButton.imageView?.contentMode = UIViewContentMode.scaleAspectFit
    menuButton.setImage(UIImage(named: "hamburger.png"), for: UIControlState.normal)
    menuButton.addTarget(self, action: #selector(menuPress), for: UIControlEvents.touchDown)
    view.addSubview(menuButton)

    //Will display the status of the simulation
    statusLabel.text = "Particle Simulation"
    statusLabel.textColor = UIColor.darkGray
    view.addSubview(statusLabel)

    //Will display visual options
    view.addSubview(segmentedLabel)
}

每个元素的大小是完美的,它们不重叠。标签位于左下角,按钮位于右下角,分段视图位于左上角(我的横向应用程序)。

我有一个额外的问题是,如果我想以编程方式开始放置这些对象,我该怎么做?这些元素没有我可以使用的属性位置,如果我做像menuButton.frame.size.height *= 20那样不会使菜单按钮超高的东西。

答案

这样做的原因是示例中的所有UI项都具有“内在”内容大小,因此他们可以创建自己的框架。以同样的方式添加标准UIView,你将失去运气。此外,视图使用自动调整大小掩码(也称为弹簧和支柱)基于初始帧创建自己的约束。

最后放置项目,您将直接设置框架。只是数学。祝好运。

了解内在内容大小非常重要。某些帧更改可能需要您关闭自动约束,但通常情况并非如此,但可能是您的按钮出现问题

   UIView.translatesAutoresizingMaskIntoConstraints = false

以上是关于当我将它们添加到UIKitView时,为什么我的对象会被放置并且尺寸如此完美?的主要内容,如果未能解决你的问题,请参考以下文章

当我将 ImageView 添加到 CardView 或 Fragment 时,为啥我的应用程序会崩溃?

当我将新闻添加到我的 Firebase 时,有啥方法可以自动发送推送通知

为啥当我将查询字符串添加到我的 url 时,它会被 xampp 拒绝(“在此服务器上找不到请求的 URL”)

为什么“访问者”组中的用户无法访问我的SharePoint 2010发布网站。当我将它们推广到“成员”组时,它可以工作

当我将它们用于数学运算时,为什么我的特化常数不能正常工作?

当我将 AVCaptureVideoPreviewLayer 添加到我的 UIView 时,UIButton 消失