即使有约束,UIButton 图像也会自动调整大小

Posted

技术标签:

【中文标题】即使有约束,UIButton 图像也会自动调整大小【英文标题】:UIButton image automatically resizes even with constraints 【发布时间】:2019-01-19 00:52:40 【问题描述】:

我有一个小问题,我可能无法解决这个问题。我以编程方式添加了一个 uibutton。我正在向那个按钮添加一个 UIImage。我只是添加基本约束,但由于某种原因,它在屏幕上运行时往往会缩小到更小的尺寸。

以下是我生成按钮的代码:

var shareButton: UIButton!

    func addShareButton() 
        shareButton = UIButton()
        shareButton.autoresizesSubviews = false
        shareButton.clipsToBounds = true
        shareButton.translatesAutoresizingMaskIntoConstraints = false
        shareButton.adjustsImageWhenHighlighted = false
        shareButton.setImage(UIImage(named: "wshare"), for: .normal)
        shareButton.addTarget(self, action: #selector(shareButtonPressed), for: .touchDown)
        shareButton.addTarget(self, action: #selector(shareButtonReleased), for: .touchUpInside)
        view.addSubview(shareButton)
    

    func addConstraints() 
        NSLayoutConstraint.activate([
            // Share Button
            shareButton.widthAnchor.constraint(equalToConstant: 60),
            shareButton.heightAnchor.constraint(equalToConstant: 60),
            shareButton.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -15),
            shareButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -25),
            ])
    

    override func updateViewConstraints() 
        addConstraints()
        super.updateViewConstraints()
    

    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(animated)
        addShareButton()
    

它生成的是这样的:

更大的盒子应该是 60x60 的实际尺寸,但它神奇地缩小到了 32x32。

你能帮我指出问题吗?我知道我错过了一些非常愚蠢的东西,但我无法理解它。

【问题讨论】:

老实说,我从来没有,也没有一次,对setImage 的方法感到轻松。就个人而言,我会创建一个UIImageView,只需将 imageView 作为子视图添加到按钮。从那里,您可以随意自定义 imageView。 好吧,那是我最后的收获。我只是希望,在选择该选项之前,我可以直截了当。好吧,我想我没有多少了 为了得到一个被接受的答案,我会发布我的答案,你可以决定是否要。 哈哈。我正要删除这个,因为这个问题没有多大价值。去做吧。我会接受;) 这就是我说做的原因。 【参考方案1】:

就我个人而言,我喜欢将我的对象分开。虽然UIButton 有一个setImage(:UIImage) 方法,但我更喜欢创建一个UIButton,然后添加我自己的UIImageView,然后添加我自己的UIImage。所以,在层次结构中

-- UIButton
    -- UIImageView
        -- UIImage

通过它,您可以指定与UIImageView 关联的特定边界和任何其他变量。我发现这种方法非常具体,尤其是在您必须更改 UIImageView 时。

【讨论】:

以上是关于即使有约束,UIButton 图像也会自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

根据内容(主要是标题和图像)自动调整 UIButton 大小的最佳方法是啥?

使用 AutoLayout 调整框架大小

自动布局 - UIButton 的固有大小不包括标题插图

UIImageview 在自动布局上调整大小

自动布局根据文本调整按钮大小并让文本字段填充可用空间

iPhone - 内部带有未调整大小图像的 UIButton