【发布时间】:2011-10-26 04:02:37
【问题描述】:
所以我有一个通用应用程序,我正在设置UIScrollView 的内容大小。显然,iPhone 和 iPad 上的内容大小会有所不同。如何为 iPad 设置特定尺寸,为 iPhone 和 iPod touch 设置其他尺寸?
【问题讨论】:
标签: objective-c ios xcode uiscrollview
所以我有一个通用应用程序,我正在设置UIScrollView 的内容大小。显然,iPhone 和 iPad 上的内容大小会有所不同。如何为 iPad 设置特定尺寸,为 iPhone 和 iPod touch 设置其他尺寸?
【问题讨论】:
标签: objective-c ios xcode uiscrollview
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
// The device is an iPad running iOS 3.2 or later.
}
else
{
// The device is an iPhone or iPod touch.
}
【讨论】:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
和
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
宏 UI_USER_INTERFACE_IDIOM() 也可以在 iOS 3.0 等较旧的 iOS 版本上运行而不会崩溃。
【讨论】:
UI_USER_INTERFACE_IDIOM() 是您的最佳解决方案,因为您的应用程序是通用的。但是,如果您在 iPad 上运行 iPhone 应用程序,那么无论使用哪种设备,UI_USER_INTERFACE_IDIOM() 都会返回UIUserInterfaceIdiomPhone。为此,您可以使用UIDevice.model 属性:
if ([[UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound) {
//Device is iPad
}
【讨论】:
UIDevice.model 属性等于“设置”>“关于”中存在的字符串,并且可由用户更改。来源:developer.apple.com/library/ios/documentation/uikit/reference/…
在 Swift 2.x 中,您可以使用以下等式来确定设备的种类:
UIDevice.currentDevice().userInterfaceIdiom == .Phone
或
UIDevice.currentDevice().userInterfaceIdiom == .Pad
在 Swift 3 中为新来的人准备。
if UIDevice.current.userInterfaceIdiom == .pad {
\\ Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified
\\ Implement your awesome logic here
}
【讨论】:
【讨论】:
使用UIScreen 类来确定应用程序的框架。
CGRect usableSpace = [[UIScreen mainScreen] applicationFrame];
返回的矩形是屏幕大小减去状态栏。不要使用 UI 习惯用法来确定可用空间,因为它们不是面向未来的。
顺便说一句,UIViewController 可以自动调整内容视图(包括滚动视图)的大小,并为您提供其他好处,例如自动旋转。如果它适合您的情况,请考虑。
【讨论】:
如果你使用的是 swift,
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad)
{
// device is ipad
}
else
{
//device is iPhone
}
您还可以检查 UIUSerInterfaceIdiom 并选择您想要的设备 UIUserInterfaceIdiom.Pad 或 UIUserInterfaceIdiom.Phone 或 UIUserInterfaceIdiom.TV 或 UIUserInterfaceIdiom.CarPlay
【讨论】: