为啥我的 UIButton 会影响我在 Swift 中的 UIImageView?

Posted

技术标签:

【中文标题】为啥我的 UIButton 会影响我在 Swift 中的 UIImageView?【英文标题】:Why does my UIButton affect my UIImageView in Swift?为什么我的 UIButton 会影响我在 Swift 中的 UIImageView? 【发布时间】:2017-03-28 07:05:06 【问题描述】:

我正在用 Swift 构建一个简单的应用程序,该应用程序包含一个 png 图像、一个 UISegmentedControl 和一个 UIButton。在 UISegmentedControl 上选择不同的控件会调整披萨图像的大小。当我点击 UISegmentedControl 中的“Large”,然后在界面上按下一个名为 submitOrderDisplay 的按钮时,它会将图像从大尺寸缩小到小尺寸。我知道这与我在代码最底部使用的 setTitle 方法有关,但我不明白为什么这会导致图像重置为其默认的小尺寸。如果我删除 setTitle 方法,则在单击 UIButton 后不会发生调整大小。我不希望在按下按钮后图像改变大小。我如何做到这一点?

import UIKit

class SecondViewController: UIViewController


@IBOutlet weak var sizeChoiceControl: UISegmentedControl!
@IBOutlet weak var submitOrderDisplay: UIButton!
@IBOutlet weak var myImageView: UIImageView!


@IBAction func sizeSelected() 

    if(sizeChoiceControl.titleForSegmentAtIndex(sizeChoiceControl.selectedSegmentIndex)! == "Small")
        myImageView.setHeight(height: 85)
        myImageView.setWidth(width: 85)
        myImageView.setX(x: 146)
        myImageView.setY(y: 63)
    
    else if(sizeChoiceControl.titleForSegmentAtIndex(sizeChoiceControl.selectedSegmentIndex)! == "Medium")
        myImageView.setHeight(height: 100)
        myImageView.setWidth(width: 100)
        myImageView.setX(x: 139)
        myImageView.setY(y: 55)
    
    else if(sizeChoiceControl.titleForSegmentAtIndex(sizeChoiceControl.selectedSegmentIndex)! == "Large")
        myImageView.setHeight(height: 115)
        myImageView.setWidth(width: 115)
        myImageView.setX(x: 131)
        myImageView.setY(y: 48)
    


@IBAction func SubmitOrderClicked(sender: UIButton)  

    submitOrderDisplay.setTitle("Update Order", forState: UIControlState.Normal)


【问题讨论】:

您是否使用自动布局,并且在图像视图和按钮之间是否有限制(可能是“相同宽度”或其他什么)? @AndreasOetjen 是的,我正在使用自动布局,该框已选中。在引用插座中,我看到 myImageView 连接到“自定义”。不确定那是什么意思。但我没有看到图像视图和其他任何东西之间的任何其他限制。 @AndreasOetjen 我尝试关闭自动布局并解决了问题,但这是防止图像调整大小的唯一方法吗?我读过,如果不使用自动布局,我的应用将很难支持所有屏幕分辨率,所以我对关闭它感到紧张。 当您使用自动布局时,您必须确保您定义的约束在修改控件的宽度和高度时仍然有效。因此,您必须将 imageView 限制为“居中”之类的东西,而不是例如到边界的固定距离。不幸的是,这通常很棘手,因此很难在简短的评论中解释。您必须尝试一下,如果您仍然遇到困难,请发布您的限制条件,我们会尽力帮助您。 【参考方案1】:

在viewDidLoad函数里面写下按钮的配置:

submitOrderDisplay.setTitle("Update Order", forState: UIControlState.Normal)

我知道你想把标题更新订单。

如果要在按下时更改标题,则必须为按钮的另一个状态调用它,例如:

submitOrderDisplay.setTitle("Update Order", forState: UIControlState.Highlihgted)

如果您在事件发生时更改按钮的配置以适应不同的状态,这一定是重新设置大小的原因。

【讨论】:

以上是关于为啥我的 UIButton 会影响我在 Swift 中的 UIImageView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它?

为啥 Swift 3 不能识别我的按钮点击?

当我在 Swift 中从音乐库中选择歌曲时,为啥我的应用程序会崩溃?

为啥我调用 .setTitle 时我的 UIButton Text 没有改变? (迅速)

Swift:如何在单击提交按钮时更改 UIButton 图像

在 Swift 中设置 UIButton 图像 - 当前解包为 nil