适用于 iPhone 和 iPad 的单笔尖
Posted
技术标签:
【中文标题】适用于 iPhone 和 iPad 的单笔尖【英文标题】:Single NIB for iPhone and iPad 【发布时间】:2013-12-19 06:27:07 【问题描述】:我已经在这里和 Google 看到了类似的问题,但没有人回答我的实际问题。我想要一个适用于 iPhone 和 iPad 的 NIB。 NIB 本身应该只有一个空视图。应该进入视图的所有内容都以编程方式完成。我检查设备是否为 iPhone/iPad,然后计算并设置布局。多做一点工作,但对于所需的任务,这对我来说是最好的解决方案。
但是当通过“新文件... -> 用户界面 -> 视图”添加新视图时,系统会要求我提供设备系列。选择当然是 iPhone 或 iPad。但我希望视图在两种设备上都能正常工作,有点通用。
我尝试了 iPhone 视图,它实际上适用于 iPhone 和 iPad 两种设备。所以似乎一切都很好。我的问题更笼统,询问是否可以为 iPad 重新使用 iPhone 视图。我要换一种方式吗?有更好的解决方案吗?
请理解,我真的想使用单一视图并以编程方式工作,因此请忽略为每个设备使用单独视图并使用 IB 的解决方案!!!
谢谢
【问题讨论】:
如果您以编程方式创建视图而不是通过编程方式创建视图本身,不是吗? 不能同时使用一个笔尖,如果你想使用通用编码,那么你可以使用我们 -(void)loadView;方法。 【参考方案1】:如果您以编程方式创建所有内容,则根本不需要笔尖来创建空视图。
你的 UIViewController 子类应该是这样的
@implementation MyViewController
-(void)loadView
//Do not call [super loadView] in your implementation.
//The super implementation loads the nib based on the nibName and nibBundle properties.
UIView * view = [[UIView alloc] init];
//Add subviews, etc
//You must assign a UIView object to the view property before loadView completes
self.view = view;
@end
您可以使用以下任何格式实例化视图控制器:
MyViewController * controller = [[MyViewController alloc] initWithNibName:nil bundle:nil];
MyViewController * controller = [[MyViewController alloc] init];
MyViewController * controller = [MyViewController new];
【讨论】:
【参考方案2】:首先你可以用 AutoResize 来做这件事 > LINK
如果它对您来说变得复杂,那么您可以使用以下函数并以编程方式自己完成。
-(int)setScreenOf
int size=0;
if((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad))
//ipad
size=3;
else
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height ==568)
size=2;
// code for 4-inch screen
else
size=1;
// code for 3.5-inch screen
return size;
或者,如果您想要执行特定于设备版本的代码,请尝试此操作。
-(NSString *)deviceVersion
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *answer = (char*)malloc(size);
sysctlbyname("hw.machine", answer, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
free(answer);
NSLog(@"Platform: %@", platform);
return platform;
【讨论】:
以上是关于适用于 iPhone 和 iPad 的单笔尖的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 无需使用笔尖即可支持 iPad 和 iPhone