将 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
}
下面我有一个按钮。
其实就是一个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
}