xcode 根据屏幕尺寸快速改变按钮高度
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/39808324/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Swift changing button height depending on screen size
提问by David Seek
So I have a button/image, and I want to get higher/smaller when viewing on iPad or a smaller iPhone.
所以我有一个按钮/图像,我想在 iPad 或较小的 iPhone 上查看时变得更高/更小。
In Xcode >7 I could put my items inside W/all H/all, then I could put constraint in compact width/any height if I wanted it to be in iPhone portrait. But in Xcode 8 its a whole new system and I don't know how to do it now, so I want to change my height of the button depending on the size of the screen, how to do that?
在 Xcode > 7 中,我可以将我的项目放在 W/all H/all 中,然后如果我希望它在 iPhone 纵向中,我可以将约束设置为紧凑的宽度/任何高度。但是在 Xcode 8 中,它是一个全新的系统,我现在不知道该怎么做,所以我想根据屏幕大小更改按钮的高度,该怎么做?
I've tried to search around on the net, and find something with make a constraint outlet. Could that work if I have autolayout on?
我试图在网上搜索,并找到一些可以做一个约束出口的东西。如果我启用了自动布局,那可以工作吗?
回答by Kubba
If you want to do this without code, using size classes you can use compact width size class which applies to all iPhones in all orientations (except large iPhones in landscape like iPhone6 plus). Compact width matches iPads only in split screen.
如果你想在没有代码的情况下做到这一点,使用尺寸类你可以使用适用于所有方向的所有 iPhone 的紧凑宽度尺寸类(除了像 iPhone6 plus 这样的横向大 iPhone)。紧凑的宽度仅在分屏中匹配 iPad。
To add vairant:
- add height constraint to your button and set it to i.e. 50 (this will add constraint for any/any
size class):
添加 vairant: - 向按钮添加高度约束并将其设置为 ie 50(这将为any/any
尺寸类添加约束):
- select constraint on storyboard
- click on size inspector (fifth tab on right window)
- click on little plus icon next to
Constant
- select
compact
for width andany
for others - now edit height constant for
wC
and set it to i.e. 30
- 选择故事板上的约束
- 单击尺寸检查器(右侧窗口的第五个选项卡)
- 单击旁边的小加号图标
Constant
- 选择
compact
宽度和any
其他 - 现在编辑高度常数
wC
并将其设置为即 30
Other way is to use UIUserInterfaceIdiom
enum in set height in code, i.e. like this:
另一种方法是UIUserInterfaceIdiom
在代码中使用enum 设置高度,即像这样:
if UIDevice.current.userInterfaceIdiom == .pad {
//adjust size for iPads
}else{
//adjust size for others
}
回答by David Seek
You could use:
你可以使用:
Swift 3
斯威夫特 3
class ViewController: UIViewController {
let screenSize: CGRect = UIScreen.main.bounds
@IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
@IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
buttonHeightContraint.constant = (screenSize.height / 2)
buttonWidthContraint.constant = (screenSize.width / 2)
}
}
Swift 2
斯威夫特 2
class ViewController: UIViewController {
let screenSize: CGRect = UIScreen.mainScreen().bounds
@IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
@IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
buttonHeightContraint.constant = (screenSize.height / 2)
buttonWidthContraint.constant = (screenSize.width / 2)
}
}
This way the UIButton.height
is always the size of the screen / 2.
这种方式UIButton.height
总是屏幕的大小/ 2。
Just have a look for the right quotient you need. For example (screenSize.height / 25.3)
, then on iPad, on every iPhone and so on, the Button will always have the height, depending on the device.
只需寻找您需要的正确商数即可。例如(screenSize.height / 25.3)
,然后在 iPad 上,在每部 iPhone 上等等,按钮将始终具有高度,具体取决于设备。
Another possibility would be the UIDeviceExtension
另一种可能性是 UIDeviceExtension
import Foundation
import UIKit
public extension UIDevice {
var modelName: String {
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8 where value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
switch identifier {
case "iPod5,1": return "iPod Touch 5"
case "iPod7,1": return "iPod Touch 6"
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4"
case "iPhone4,1": return "iPhone 4s"
case "iPhone5,1", "iPhone5,2": return "iPhone 5"
case "iPhone5,3", "iPhone5,4": return "iPhone 5c"
case "iPhone6,1", "iPhone6,2": return "iPhone 5s"
case "iPhone7,2": return "iPhone 6"
case "iPhone7,1": return "iPhone 6 Plus"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3"
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4"
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air"
case "iPad5,3", "iPad5,4": return "iPad Air 2"
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini"
case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad Mini 2"
case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad Mini 3"
case "iPad5,1", "iPad5,2": return "iPad Mini 4"
case "iPad6,7", "iPad6,8": return "iPad Pro"
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4", "iPad3,1", "iPad3,2", "iPad3,3", "iPad3,4", "iPad3,5", "iPad3,6", "iPad4,1", "iPad4,2", "iPad4,3", "iPad5,3", "iPad5,4", "iPad2,5", "iPad2,6", "iPad2,7", "iPad4,4", "iPad4,5", "iPad4,6", "iPad4,7", "iPad4,8", "iPad4,9", "iPad5,1", "iPad5,2": return "iPad"
case "AppleTV5,3": return "Apple TV"
case "i386", "x86_64": return "Simulator"
default: return identifier
}
}
}
Used as following (for example):
使用如下(例如):
let modelName = UIDevice.currentDevice().modelName
if modelName == "iPad" {
buttonOutlet.frame.size.height = 42
} else if modelName == "iPhone 4" {
buttonOutlet.frame.size.height = 25
}
And so on.
等等。