从 UIButton 引用中心 x/y 点不正确

Referring to center x/y point from UIButton is not correct

我正在尝试以编程方式制作一个 UITextField:位于 UIButton 的中心并且具有相同的宽度。当用户单击按钮时,应弹出文本。这是我到目前为止得到的:

    @IBAction func buttonTapped(_ sender: UIButton)
{
    let centerXPointForSender = sender.center.x
    let centerYPointForSender = sender.center.y
    let animatingScoreText = UITextField(frame: CGRect(x: centerXPointForSender, y: centerYPointForSender, width: 300, height: 40))
    animatingScoreText.minimumFontSize = 8
    animatingScoreText.adjustsFontSizeToFitWidth = true
    animatingScoreText.font = UIFont(name: "Damascus", size: 30)
    animatingScoreText.textColor = UIColor.cyan
    animatingScoreText.text = "Well hello"
    animatingScoreText.textAlignment = .center
    view.addSubview(animatingScoreText)
}

宽度不应该是 300,而是按钮的宽度。但是,文本显示得太靠右了?如果您可以创建一个带有执行上述代码的按钮的项目,您将遇到完全相同的问题。这段代码有什么问题?打印按钮和文字的Y位置时,也是不一样的。

我是否误解了使用 x:y: 设置框架的原点如何影响相对于中心的位置?

假设按钮和文本字段具有相同的父视图,最简单的方法是:

var frame = sender.frame
frame.size.height = 40
frame.origin.y = frame.origin.y + (sender.frame.size.height - frame.size.height) / 2
let animatingScoreText = UITextField(frame: frame)

除了以按钮高度为中心的不同高度外,这使文本字段与按钮具有相同的框架。

当您初始化 UITextField 时,您将 origin 设置为按钮的中心。原点指的是左上角,这就是您的文本字段显示在右侧的原因。

换句话说,您是在告诉 UITextField 放置在视图中,左上角位于按钮的中央。

如果您希望文本字段与按钮的位置相同,请更改为:

UITextField(frame: CGRect(x: sender.frame.origin.x, y: sender.frame.origin.y, width: 300, height: 40))

这假定按钮的超级视图与 UITextField 的超级视图相同。

如果 UITextField 应该与按钮处于完全相同的位置,您甚至可以通过以下方式简化此操作:

UITextField(frame: sender.frame)