iOS对不同设备有不同的限制
我有一个为iPhone SE设计的ViewController 如您所见,我还有一个约束条件iOS对不同设备有不同的限制,ios,xcode,size-classes,Ios,Xcode,Size Classes,我有一个为iPhone SE设计的ViewController 如您所见,我还有一个约束条件Align Top to:Safe Area=75 问题是,是否可以更改iPhone 8和iPhone 8 Plus的此值?例如: SE=75 8=85 8加=105 不使用Interface Builder,没有限制,只能针对紧凑型、常规型或任何尺寸,所有iPhone型号在纵向模式下都具有紧凑的宽度和常规的高度 如果需要这种粒度,则必须使用代码。这不适用于IB,您可以通过将视图的顶部约束挂接为IBO
Align Top to:Safe Area=75
问题是,是否可以更改iPhone 8和iPhone 8 Plus的此值?例如:
- SE=75
- 8=85
- 8加=105
- 不使用Interface Builder,没有限制,只能针对紧凑型、常规型或任何尺寸,所有iPhone型号在纵向模式下都具有紧凑的宽度和常规的高度
如果需要这种粒度,则必须使用代码。这不适用于IB,您可以通过将视图的顶部约束挂接为IBOutlet和ViewDidLayoutSubview来尝试在代码中使用
override func viewDidLayoutSubviews()
{
if(deviceWidthSE)
{
self.viewTopCon.constant = 75
}
else
if(deviceWidth8)
{
self.viewTopCon.constant = 85
}
else
if(deviceWidth8Plus)
{
self.viewTopCon.constant = 105
}
}
我们也面临着类似的问题。我们使用名为scaled的助手类解决了这个问题。它基本上只是乘以某个东西的大小,在更大的设备上应该显示得更大
extension CGFloat {
public var scaled: CGFloat {
switch UIDevice.type.getResolutionGroup()! {
case .lr320x568:
return self
case .lr375x667:
return self * 1.1
case .lr414x736:
return self * 1.2
case .lr768x1024:
return self * 1.3
// For iPads
case .lr1024x1366:
return self * 1.3
}
}
}
决议组的制定和实施
public func getResolutionGroup() -> ResolutionGroup? {
switch self {
case .iPhone5, .iPhone5C, .iPhone5S, .iPhoneSE, .iPodTouch5, .iPodTouch6:
return .lr320x568
case .iPhone6, .iPhone6S, .iPhone7:
return .lr375x667
case .iPhone6Plus, .iPhone6SPlus, .iPhone7Plus:
return .lr414x736
case .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4:
return .lr768x1024
case .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2:
return .lr768x1024
case .iPadPro:
return .lr1024x1366
case .simulator:
return isiPhone() ? .lr320x568 : .lr768x1024
default:
return .lr320x568
}
}
应用程序中的应用程序和用法
fileprivate let footerHeight = CGFloat(180).scaled
简单的方法!
为了解决这个问题,我创建了一个小型的应用程序,这样您就不必编写一行代码,只需将类(NSLayoutHelper)分配给您的约束,您就可以以不同的方式更新所有设备的约束
用于更新约束
输出
你可以考虑另一种约束;将正方形底部约束到superview的中心。嗯,这会有所帮助。我试试看。谢谢如果你真的需要这样做,那么约束就是方法。尝试使用。我知道这不会给你带来任何改变。只有苹果公司在广泛研究的基础上得出了这些价值观。你不应该有这样的设计。尝试将其约束到顶部,然后修改其与其他视图的对比。也谢谢你的回答。例如,当我在SE上有一个完美的ViewController外观,在iPhone8Plus上有太多的空白空间时,你能写下你的想法吗?我需要更改代码中的约束吗?需要。根据viewcontroller视图的大小(或设备屏幕大小),为您的约束创建一个出口,并将其常量更改为您想要的值。谢谢您的回答,您能告诉我这是否是iOS的正常做法吗?当然,这是唯一的方法,直到苹果为你提到的问题创建大小类OK,请随意使用乘数:)谢谢。有一天会尝试:)嘿@Catalin你是说一个不支持通用设备的应用程序吗?我只是在iPhone支持的情况下测试了这一点,在这种情况下,它选择了4.7英寸的设备。工作很好。@FredericoRossini和你的反馈非常重要,谢谢你的尝试。你的图书馆太棒了。谢谢与我们分享谢谢:)@EminTurk