我正在制作一个主屏幕,我有4-5个按钮。我们知道iphone 5 / SE屏幕比iphone 6和7小。因此我们需要根据屏幕尺寸扩展和缩小按钮尺寸。什么是最好的方法或算法?我使用固定的最小尺寸的按钮来处理iphone 5,但是当我们使用iphone 6和7时,这些固定的小尺寸按钮看起来很奇怪。
答案 0 :(得分:2)
有一种简单的方法可以按屏幕大小调整按钮大小。比如说iPhone 5上有正确的按钮大小,宽度为320,高度为568.
声明两个类变量(或全局变量,如果要调整不同类中的按钮的大小),称为widthMultiplier
和heightMultiplier
:
var widthMultiplier = 0.0
var heightMultiplier = 0.0
在viewDidLoad
方法中,添加以下代码:
widthMultiplier = Double(self.view.frame.size.width) / 320
heightMultiplier = Double(self.view.frame.size.height) / 568
然后你可以根据这个来调整按钮的大小:
button.frame.size.width = button.frame.width * CGFloat(widthMultiplier)
button.frame.size.height = button.frame.height * CGFloat(heightMultiplier)
如果您愿意,您还可以调整该按钮的位置,使其与屏幕尺寸成比例,以便显示在iPhone 6/7更大屏幕尺寸的正确位置,例如6/7 Plus:< / p>
button.frame.origin = CGPoint(x: button.frame.origin.x * CGFloat(widthMultiplier), y: button.frame.origin.y * CGFloat(heightMultiplier))
我希望这会有所帮助。
答案 1 :(得分:1)
我用过几种方法来解决这个问题:
声明模型中按钮的大小。模型应该有一个返回按钮大小的方法,然后您可以修改每个设备/屏幕大小的值。例如:
class MyLayoutClass {
func getSizeForButton() -> CGSize {
if UIDevice.current.userInterfaceIdiom == .pad {
return CGSize(width: 100, height: 50)
} else {
// iphones
let bounds = UIScreen.main.bounds
// iphone SE has 320 width
if bounds.width > 320 {
return CGSize(width: 80, height: 50)
} else {
return CGSize(width: 50, height: 50) // smaller button size!
}
}
}
}
然后,您可以使用此尺寸将与屏幕相关的尺寸应用于按钮
另一种方法涉及Interface Builder。您可以将所有按钮设置为彼此具有固定边距,然后将“等宽”关系应用于彼此。见截图示例:
答案 2 :(得分:0)
好方法
您可以使用UIStackView
或UITableView
或UICollectionView
。根据屏幕大小在运行时动态定义UICollectionViewCell
或UITableViewCell
的大小。
手动方法
如果您已经添加了不同的5个按钮,并且您不想进行上述更改,则AutoLayout可以帮到您。
如果需要水平放置,请为所有按钮定义Equal Widths
约束。同样,在垂直定位的情况下,您可以指定Equal Heights
约束。
您甚至可以根据屏幕尺寸在运行时计算宽度或高度,并在运行时设置!!
希望它有所帮助。快乐编码!!
答案 3 :(得分:0)
为@Juan的出色建议添加更多细节:
要将按钮/对象设置为相等的宽度:
i。选择按钮/对象之一
ii。 Ctrl +拖动到目标按钮/对象,然后从上下文菜单中选择“相等宽度”
答案 4 :(得分:-2)
您可以在限制中使用AutoLayout
,在XCode中使用AutoResizing
。