以编程方式在不同的iPad屏幕分辨率上更改.xib大小

时间:2016-05-19 07:01:10

标签: ios objective-c ipad

我在iPad mini / iPad 4和iPad Pro的视图中显示HUD时出现问题。它不应该成为中心。我认为,这是我的.xib大小的问题。这取决于模拟的度量设置。

我尝试使用模拟指标

设置.xib

1。 iPad全屏

我使用iPad全屏设置我的.xib,

iPad

如果我打开源代码,它会给我1024 x 704的分辨率。

<rect key="frame" x="0.0" y="64" width="1024" height="704"/>

然后我在iPad上运行它,我的HUD应该是中心。但如果我在iPad Pro上运行,我的HUD也不会中心。看起来我的HUD仍然在1024 x 704的中心。

2。 iPad Pro全屏

我尝试使用iPad Pro全屏设置.xib

iPad Pro

它给了我1366 x 960分辨率

<rect key="frame" x="0.0" y="64" width="1366" height="960"/>

然后我在iPad Pro上运行它,我的HUD应该是中心。但如果我在iPad上运行,我的HUD也不会中心。看起来我的HUD仍然在1366 x 960的中心。

我不认为模拟指标的设置会对我的HUD问题产生影响,因为here。我正在使用JGProgressHUD btw,这就是我展示HUD的方式。

HUD = [JGProgressHUD progressHUDWithStyle:JGProgressHUDStyleDark];
HUD.textLabel.text = NSLocalizedString(@"MISC_LOADING_DATA", nil);
[HUD showInView:self.view];

此HUD将自动居中于self.view,我认为重要的是我的.xib尺寸。我的问题是,如何设置.xib尺寸,将我的HUD放在iPad和iPad Pro上?

任何帮助将不胜感激。谢谢。

更新

我的问题是self.view.bounds.size viewDidLoad上的self.view.bounds.size值与某些方法的完成处理程序中的- (void)viewDidLoad { [super viewDidLoad]; // first print NSLog(@"Height: %f", self.view.bounds.size.height); NSLog(@"Width: %f", self.view.bounds.size.width); [self generateData:^(BOOL result) { if (HUD.superview) { [HUD dismiss]; // 2nd print on completion handler NSLog(@"Height: %f", self.view.bounds.size.height); NSLog(@"Width: %f", self.view.bounds.size.width); } }]; } 不同。

2016-05-19 16:39:31.529 hr-akses[34013:1535416] Height: 704.000000
2016-05-19 16:39:31.529 hr-akses[34013:1535416] Width: 1024.000000

我在iPad Pro上运行。在第一次印刷时,它给了我

2016-05-19 16:39:31.607 hr-akses[34013:1535416] Height: 960.000000
2016-05-19 16:39:31.607 hr-akses[34013:1535416] Width: 1366.000000

但是在第二次印刷时,它给了我

viewDidLoad

解决

正如Luke Smith所说,自动布局很可能没有在viewWillAppear完成其内容。我在Header set X-Frame-Options DENY 初始化我的HUD并解决了我的问题。

1 个答案:

答案 0 :(得分:2)

您在此处使用的此大小设置纯粹是为了在Interface Builder中编辑屏幕的大小。这里的问题不在于此设置,而在于您的自动布局规则,您尚未提及。

请尝试以下规则:将其固定在距离顶部4个像素的位置,并为其指定固定宽度和高度,您需要:

Fix 4 px from top, and fix width and height

然后要修复它以使其始终水平居中,您需要:

Centre item horizontally in container

(请仔细注意方框中的刻度,以及位置限制上的红色标记 - 那些是在那里创建的那些)

现在有了这4条规则,你的物品总是水平居中,从顶部开始4,并且从手表到iPad Pro绝对任何设备上都有一个设定的宽度和高度。

如果您现在更改模拟度量标准中的大小设置,是的,IB屏幕可能会出现一些错误,但相同的规则仍然存在,并且仍将在运行时工作。错误只是界面生成器中显示的布局 - 即规则说该项应该是死中心,但现在它不是。

如果IB屏幕仍显示错误,您可以执行的操作是选择具有定位错误的屏幕项目,并执行以下两项操作之一:Update frames / contraints

更新框架:如果选择此选项,它将获取规则,并将其应用为应用程序正在运行。因此,如果规则说它应该居中,并且它当前没有在Interface Builder中居中,那么选择它将实现这种居中。

更新约束:如果选择此项,IB会假定项目的位置是实际的(如果它不是例如居中)而不是改变项目的位置,而是改变规则本身以适应位置该项目目前在。

玩那些让它沉入其中的游戏 - 这些东西非常方便并且一直在使用。