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

时间:2017-02-09 18:22:55

标签: ios swift uibutton uitextfield centering

我正在尝试以编程方式创建一个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:框架的原点相对于中心的位置?

2 个答案:

答案 0 :(得分:1)

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

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)

这使得文本字段与按钮的框架相同,除了按钮高度中心的不同高度。

答案 1 :(得分:1)

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

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

如果您希望textField与按钮更改为的位置相同:

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

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

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

UITextField(frame: sender.frame)