我在iPad mini / iPad 4和iPad Pro的视图中显示HUD时出现问题。它不应该成为中心。我认为,这是我的.xib大小的问题。这取决于模拟的度量设置。
我尝试使用模拟指标
设置.xib1。 iPad全屏
我使用iPad全屏设置我的.xib,
如果我打开源代码,它会给我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
它给了我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并解决了我的问题。
答案 0 :(得分:2)
您在此处使用的此大小设置纯粹是为了在Interface Builder中编辑屏幕的大小。这里的问题不在于此设置,而在于您的自动布局规则,您尚未提及。
请尝试以下规则:将其固定在距离顶部4个像素的位置,并为其指定固定宽度和高度,您需要:
然后要修复它以使其始终水平居中,您需要:
(请仔细注意方框中的刻度,以及位置限制上的红色标记 - 那些是在那里创建的那些)
现在有了这4条规则,你的物品总是水平居中,从顶部开始4,并且从手表到iPad Pro绝对任何设备上都有一个设定的宽度和高度。
如果您现在更改模拟度量标准中的大小设置,是的,IB屏幕可能会出现一些错误,但相同的规则仍然存在,并且仍将在运行时工作。错误只是界面生成器中显示的布局 - 即规则说该项应该是死中心,但现在它不是。
如果IB屏幕仍显示错误,您可以执行的操作是选择具有定位错误的屏幕项目,并执行以下两项操作之一:
更新框架:如果选择此选项,它将获取规则,并将其应用为应用程序正在运行。因此,如果规则说它应该居中,并且它当前没有在Interface Builder中居中,那么选择它将实现这种居中。
更新约束:如果选择此项,IB会假定项目的位置是实际的(如果它不是例如居中)而不是改变项目的位置,而是改变规则本身以适应位置该项目目前在。
玩那些让它沉入其中的游戏 - 这些东西非常方便并且一直在使用。