我很确定我现在正在以完全错误的方式解决这个问题 - 但在我放弃并重新开始之前,我想我会问......我基本上需要能够检测到正在使用该应用程序的设备(iPhone 4 或 iPhone 5)和设备所在的方向,然后根据这些调整我的视图控制器的输出 - 这就是我所拥有的:
检测设备(好吧,它不检测设备,只是它是一个更大的屏幕,但对我来说没关系!):
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
使用宏检测设备,以及检测方向然后调整视图的代码:
- (void)doLayoutForOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation)) {
_Logo.frame = CGRectMake(97, 50, 127, 150);
_timeLabel.frame = CGRectMake(17, 248, 286, 21);
_years.frame = CGRectMake(70, 277, 35, 50);
_yearsLabel.frame = CGRectMake(64, 335, 42, 21);
_months.frame = CGRectMake(145, 277, 35, 50);
_monthsLabel.frame = CGRectMake(131, 335, 58, 21);
_days.frame = CGRectMake(220, 277, 35, 50);
_daysLabel.frame = CGRectMake(216, 335, 39, 21);
_hours.frame = CGRectMake(70, 393, 35, 50);
_hoursLabel.frame = CGRectMake(62, 451, 46, 21);
_minutes.frame = CGRectMake(145, 393, 35, 50);
_minutesLabel.frame = CGRectMake(132, 451, 61, 21);
_seconds.frame = CGRectMake(220, 393, 35, 50);
_secondsLabel.frame = CGRectMake(203, 451, 68, 21);
} if (UIInterfaceOrientationIsLandscape(orientation) && IS_IPHONE_5) {
_Logo.frame = CGRectMake(221, 20, 127, 150);
_timeLabel.frame = CGRectMake(141, 178, 286, 21);
_years.frame = CGRectMake(87, 221, 35, 50);
_yearsLabel.frame = CGRectMake(83, 279, 42, 21);
_months.frame = CGRectMake(162, 221, 35, 50);
_monthsLabel.frame = CGRectMake(150, 279, 58, 21);
_days.frame = CGRectMake(234, 221, 35, 50);
_daysLabel.frame = CGRectMake(232, 279, 39, 21);
_hours.frame = CGRectMake(308, 221, 35, 50);
_hoursLabel.frame = CGRectMake(302, 279, 46, 21);
_minutes.frame = CGRectMake(385, 221, 35, 50);
_minutesLabel.frame = CGRectMake(372, 279, 61, 21);
_seconds.frame = CGRectMake(466, 221, 35, 50);
_secondsLabel.frame = CGRectMake(449, 279, 68, 21);
} else {
_Logo.frame = CGRectMake(177, 20, 127, 150);
_timeLabel.frame = CGRectMake(97, 178, 286, 21);
_years.frame = CGRectMake(27, 221, 35, 50);
_yearsLabel.frame = CGRectMake(23, 279, 42, 21);
_months.frame = CGRectMake(102, 221, 35, 50);
_monthsLabel.frame = CGRectMake(90, 279, 58, 21);
_days.frame = CGRectMake(174, 221, 35, 50);
_daysLabel.frame = CGRectMake(172, 279, 39, 21);
_hours.frame = CGRectMake(248, 221, 35, 50);
_hoursLabel.frame = CGRectMake(242, 279, 46, 21);
_minutes.frame = CGRectMake(325, 221, 35, 50);
_minutesLabel.frame = CGRectMake(312, 279, 61, 21);
_seconds.frame = CGRectMake(406, 221, 35, 50);
_secondsLabel.frame = CGRectMake(389, 279, 68, 21);
}
}
如果我注释掉中间位,则应用程序在 iPhone 5 模拟器上运行良好,但是当我使用 iPhone 4 模拟器并旋转设备时,标签会从屏幕上消失 - 这是我需要检测设备的原因(它在两个设备上的纵向模式,因为底部的标签集不会进入屏幕底部)。
如果我按原样运行它 - 即使设备(任何设备)处于纵向模式/视图中,标签和徽标也会以横向视图显示。
我猜问题是我的设置/计划出现了某种形式的“失败”或逻辑错误,但此时我想不出另一种方式来对它进行文字/编程。
谢谢