我想我的布局厦门国际银行,这样的布局在两个iphone 5(4英寸视网膜)和3.5设备配合。
因为我要支持IOS-5我不能使用自动布局。 我必须用弹簧和Struts。
我试着在接口建设者的一切。 但无论我的看法是超越的iphone-3.5英寸的底部或没有完全填充iphone 4英寸视网膜。
有人可以给一个提示如何真正做出XIB既兼容的设备?
为了更清楚我加入的截图:
当我在属性检查器中设置大小3.5:
它看起来与iPhone 5。 下面有按钮的空间:
如果我设置界面生成器大小为4英寸。 你可以看到底部按钮在iphone-4可见。
所以,你会问什么是我使用的设置。 这里是他们:
Answer 1:
您的UIViewController中添加新的类别并添加.h文件中的代码
- (id)initWithNibNameforIphone4:(NSString *)nibNameOrNil4 NibNameforIphone5:(NSString *)nibNameOrNil5 NibNameforIpad:(NSString *)nibNameOrNilpad bundle:(NSBundle *)nibBundleOrNil;
在您的.m文件添加以下代码
- (id)initWithNibNameforIphone4:(NSString *)nibNameOrNil4 NibNameforIphone5:(NSString *)nibNameOrNil5 NibNameforIpad:(NSString *)nibNameOrNilpad bundle:(NSBundle *)nibBundleOrNil { if (self = [super init]) { self = [self initWithNibName:[self CheckDeviceIphone4:nibNameOrNil4 Iphone5:nibNameOrNil5 Ipad:nibNameOrNilpad] bundle:nibBundleOrNil]; } return self; } -(NSString *)CheckDeviceIphone4:(NSString *)iphone4 Iphone5:(NSString *)iphone5 Ipad:(NSString *)ipad { return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ? ipad :([[UIScreen mainScreen] bounds].size.height == 568) ? iphone5 :iphone4; }
打开YouProject-Prefix.pch文件,并在这里导入您的类别
现在你只需在所有使用过的项目像这样
self.firstView=[[firstView alloc]initWithNibNameforIphone4:@"firstView4" NibNameforIphone5:@"firstView" NibNameforIpad:@"firstViewIpad" bundle:[NSBundle mainBundle]];
感谢,然后任何问题发表评论,不要忘记给予好评:-)
\
Answer 2:
尝试添加这对所有的控制器,其需要支持iPhone 5:
- (void) loadView
{
[super loadView];
self.view.frame = [UIScreen mainScreen].bounds;
}
Answer 3:
使用界面建设者只需设置视图大小无
这将需要视图大小在运行时,只是你需要照顾的起源和自动调整大小为视图中的每个元素(的UILabel,UIImage的,等等)。
- 接口助洗剂(XIB) - >属性检查员- >模拟度量-尺寸:无
Answer 4:
我与今天这个挣扎,无论我做什么,我的观点始终显示为小320x480,甚至在视网膜上4" 模拟器上运行时,即使[UIScreen mainScreen] .bounds返航小320x480!
我发现,加入Default-568h@2x.png启动图像的关键是让iOS的认识到我的应用程序为“视网膜4" 准备就绪”。一旦我做到了,我发现了什么都不要做,让笔尖自动大小没有黑条。没有必要有两个独立的xibs,在Interface Builder中更改设置,覆盖的loadView等。
Answer 5:
你不必使用不同的笔尖的3.5英寸和4英寸的设备。 设计了4英寸设备的应用程序,并正确设置AutoResizingMask,它应该正常工作。
在你的情况下,只需设置AutoResizingMask到
[view setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
该自动尺寸面膜正确放置,以便其在这两个设备的位置。
Answer 6:
如果你使用2个厦门国际银行文件的解决方案; 在initWithNibName()方法简单地使与不同的笔尖名超级呼叫。
所以,当苹果发布更大屏幕选择了更大的厦门国际银行文件,我将在原有480高度尺寸,而不是在568高度测试。 在未来,至少较大的厦门国际银行不会信盒装尽可能较小的一个。
// From MainView.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
self = [super initWithNibName:@"MainView" bundle:nibBundleOrNil];
}
else
{
// iPhone 5 or maybe a larger iPhone ??
self = [super initWithNibName:@"MainView5" bundle:nibBundleOrNil];
}
return self;
}
Answer 7:
我有个主意。 让你的用户界面分为标题,正文和页脚(如网站)。 然后在你的代码的控制台,定位到尺寸检查,并使用自动调整大小。
注意广场的外线,它是对主视图控件的位置。 设置页脚附连到顶部和对照组(书签,关闭等),以在底部首标部分和主体部分的控制(导航栏,的UIImageView,UIButton的等)。
每次运行,控制系统将连接到他们的自动调整大小设置。 您将有iPhone 5的头/体和页脚之间的空间,但我认为这是很好。
Answer 8:
定义下面线和检查基于设备状态。
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 )
if (IS_IPHONE_5) {
btnBookmark.frame=CGRectMake(0, 460, 100, 70);
btnBookmark.frame=CGRectMake(150, 460, 100, 70);
}
else {
btnBookmark.frame=CGRectMake(0, 360, 100, 70);
btnBookmark.frame=CGRectMake(150, 360, 100, 70);
}
Answer 9:
我有一个问题,与3.5" 对比4" ,以及,我误解了什么是错的,所以我想柜面它可以帮助任何人在这里将其记录下来。
如果您试图访问self.view.frame
它不会被正确地报告,直到viewDidAppear
或一些类似的事件。 如果您尝试访问self.view.frame
从内部viewDidLoad
,那么你可以报告框架的尺寸自动调整大小发生之前 。
Answer 10:
- 在你的故事板,单击“显示文件检查器”。
- 下界面生成文档 - >文档的版本中,选择部署= iOS 5的(或选择)。
如果这不起作用,则需要使用您的每一个意见工作。 选择它们。 在属性检查器中为他们每个人,在视图部分,请参阅Mode属性。 将其设置为“重绘”。
如果即使是没有给予满意的结果,将视图大小,以最小的所有版本,你要使用。 并设置模式属性=“规模,以填补”。
编程,mode属性view.contentmode财产。
Answer 11:
如果不使用自动布局,你可能需要处理很多事情的代码。 我认为大部分的布局可以用弹簧和支柱,但一些UI元素很好地工作不能因此只需根据您的视图的大小需要手动设置特定对象的帧。
Answer 12:
ivanzoid的片段上方,查询整个屏幕大小的伎俩,只要你还记得减去偏移量导航和工具栏(在大多数情况下总计64)。
这是一个需要进行调整的观点高度; 弹簧和支柱否则照顾它。
重新测试我对iPhone 5应用程序我只有这样做一个屏幕,一些运行时控制位置的调整上。 任何其他情况下是由厦门国际银行违约处理。
Answer 13:
如果你不想使用两个厦门国际银行和有关使用自动调整大小做这里
Answer 14:
如果你的用户界面过于复杂,包含了太多的UIControls,那么我建议做在viewDidLoad中()如下:
NSLog(@"Iphone %f ",[[UIScreen mainScreen] bounds].size.height);
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
//design frames of your controls accordingly add add the controls as subview to
self.view
//this is iphone 5 xib
} else
{
//design frames of your controls accordingly add add the controls as subview to
self.view
// this is iphone 4 xib
}
文章来源: How to make xib compatible with both iphone 5 and iphone 4 devices