将 UIButton 标题设置为所有屏幕尺寸的特定位置

Set UIButton tittle to specific position for all screen sizes

下面我有一个按钮。

其实就是一个UIButton,里面有一个Image。问题是 "Scan Product" 也在图像内部,不是标题。

首先我想知道 apple 是否允许这样做,因为我在指南中找不到任何内容。

还有一种方法可以将标题放置在按钮高度的 25% 处。

编辑

scanTest.setTitle("Test", for: .normal)
        let x = scanTest.frame.origin.x * 0.35
        scanTest.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: x, right: 0)

这是将标题放置在按钮高度的 25% 处。但是 iPhone SE 看起来不对。

我的意思是我不认为这是 25%。

第一个问题的答案:- Apple 肯定会允许这样做。

第二个问题的答案:- 因为标题在图像中,所以标题不能从 xcode 更改,但您可以编辑图像。

您可以通过'size inspector'根据标题和图片插入设置标题和图片。 另一种方法是您可以在一个视图中获取 UIImage(您的图像)和 UILabel(放置您的标题),并在 UIButton 之上进行更多自定义。

我建议对所有内容使用 AutoLayout,这样您就可以在图像顶部添加一个不可见的 UIView,它占图像高度的 25%,然后只需将按钮添加到该视图并确保按钮的topAnchor与新的UIView相同。

如果你不明白,请告诉我,我可以给你举个例子。

更新:

您可以尝试 运行 这个,它可能不是最佳解决方案,但可以完成工作。 (你可以玩背景颜色来理解架构)

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    view.backgroundColor = .white

    let imageView = UIImageView()
    view.addSubview(imageView)
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    let holder = UIView()
    view.addSubview(holder)
    holder.translatesAutoresizingMaskIntoConstraints = false
    holder.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.25).isActive = true
    holder.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    holder.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    holder.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    let label = UILabel()
    holder.addSubview(label)
    label.translatesAutoresizingMaskIntoConstraints = false
    label.topAnchor.constraint(equalTo: holder.topAnchor).isActive = true
    label.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    label.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    label.text = "Hello"
    label.textAlignment = .center

}