1. 项目中加个1136*640的启动页面图片,命名 Default-568@2x.png
2. ios模拟器硬件->设备->iPhone(Retina 4-inch)
3. 动态更改控件布局和高度[UIScreen mainScreen].bounds.size.height
代码中不要写320和480什么的初始化坐标,要用屏幕高度和宽度初始化
#define Screen_height [[UIScreen mainScreen] bounds].size.height
#define Screen_width [[UIScreen mainScreen] bounds].size.width
CGRect screenBounds = [ [UIScreenmainScreen]bounds];
screenBounds.origin.y = 0
screenBounds.size.height = 480
CGRect viewFrame = [[UIScreenmainScreen]applicationFrame];
viewFrame.origin.y = 20
viewFrame.size.height = 460
例如:
如果想实现一个UILabel控件始终位于:距离屏幕下边缘140高的位置,则不能这样写:
lblMsg = [[UILabel alloc] initWithFrame:CGRectMake(150, 320, 150, 30)];
这样是不行的,因为它的Y值已经固定了,所以它的位置不会随屏幕的拉伸而改变。如果在4寸屏的时候,它就会位于屏幕中间的位置了,而不是下方。
解决办法:可以使用
lblMsg = [[UILabel alloc] initWithFrame:CGRectMake(150, [UIScreen mainScreen].bounds.size.height - 140, 150, 30)];
这种情况下,UILabel的Y值是相对于屏幕尺寸而变化的,所以就实现了在3.5寸屏和4寸屏下,始终都位于距离屏幕底部 140高的位置上。
修改程序界面,应尽量获取当前屏幕的size,而不是写死的值(尽量不要写死480,而根据当前屏幕[UIScreen mainScreen].bounds)选择能在分辨率改变时省去不少麻烦
判断设备是不是iPhone 5 iPod 5
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568)<DBL_EPSILON)
同样,对于控件的高度等,也是需要相对定位的,不能写死。这样就实现了兼容
stackoverflow上代码,如何判断iphone 5
- #define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
如果要兼任ipad
- <p class="p1">#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )<span class="s1">568</span> ) < DBL_EPSILON )</p><p class="p1">#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @<span class="s2">"iPhone"</span> ] )</p><p class="p1">#define IS_IPHONE_SIMULATOR ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @<span class="s2">"iPhone Simulator"</span> ] )</p><p class="p1">#define IS_IPOD ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @<span class="s2">"iPod touch"</span> ] )</p><p class="p1">#define IS_IPHONE_5 ( ((IS_IPHONE) || (IS_IPHONE_SIMULATOR)) && IS_WIDESCREEN )</p>