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