我在迎接新的iPhone 5屏幕高度方面遇到了一些麻烦,我需要调整我的桌面视图以显示广告。
直到iOS6我没有问题,我使用了以下功能,但它没有使用比例。说实话,我很惊讶它有效。
+ (CGRect)setTableBoundsByHeight:(int)lHeight:(UITableView*)tbl {
CGRect tableFrame = tbl.frame;
return CGRectMake(tableFrame.origin.x,
tableFrame.origin.y,
tableFrame.size.width,
lHeight);
}
这是代码,我在367处硬编码了表格视图的高度,这是减去导航控制器和标签栏的高度。 50是广告的高度。
if (!productPurchased) {
#ifdef VER_FREE
[[LARSAdController sharedManager]
addAdContainerToView:self.view withParentViewController:self];
[[LARSAdController sharedManager]
setGoogleAdPublisherId:@"number"];
[reportTableView setFrame:[General
setTableBoundsByHeight:(367-50):reportTableView]];
#endif
} else {
[reportTableView setFrame:[General
setTableBoundsByHeight:367:reportTableView]];
}
我发现了一些可扩展的代码,但我不确定如何实现它。
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
答案 0 :(得分:0)
忽略比例,它会自动缩放。只需检查iPhone 5是否设置不同的高度,但你使用iphone5像素数/ 2,因为它会将其缩放到2倍本身。
答案 1 :(得分:0)
如果此代码在视图控制器中,请使用self.view.bounds.height
而不是367。
顺便说一下:你应该重命名
+ (CGRect)setTableBoundsByHeight:(int)lHeight:(UITableView*)tbl
类似
+ (CGRect)setTableBoundsByHeight:(int)lHeight tableView:(UITableView *)tbl
答案 2 :(得分:0)
使用硬编码值(例如“神奇数字”)是一种错误的习惯,你现在明白为什么。总是更喜欢使用常量或运行时计算的值。此外,它使代码更容易阅读,因为通过使用常量,您将知道数字对应的内容,而不是来自任何地方的“魔术数字”。
因此,对于您的问题,请使用下面的代码在运行时计算高度值。
// simply use the height of the current viewController's `view`
// which is probably the view of the `navigationController`'s `topViewController`
// and is already at the correct size, namely 367 in iPhone 3.5" and 455 in iPhone 4".
CGFloat screenHeight = self.view.height;
if (!productPurchased)
{
static CGFloat advertHeight = 50;
#ifdef VER_FREE
[[LARSAdController sharedManager]
addAdContainerToView:self.view withParentViewController:self];
[[LARSAdController sharedManager]
setGoogleAdPublisherId:@"number"];
[reportTableView setFrame:[General
setTableBoundsByHeight:(screenHeight-advertHeight):reportTableView]];
#endif
} else {
[reportTableView setFrame:[General
setTableBoundsByHeight:screenHeight:reportTableView]];
}
请注意,您不需要自己进行任何减法,因为UIViewControllers
会根据可用空间调整其视图大小,因此如果您有UITabBarController
包含UINavigationController
1}}它本身在其堆栈顶部显示UIViewController
,最后一个viewController的view
的高度将是屏幕的高度减去tabBar,statusBar和navBar高度。
因此,不是提取[UIScreen mainScreen].applicationFrame
,而是减去tabBar(如果有的话)和navBar高度以获得367pt的值,只需使用viewController
的{{1}的高度直接,你应该直接拥有正确的值。
附加说明:您应该为第二个参数添加前缀,因此将方法命名为view
而不是setTableBoundsByHeight:tableView:
,其中第二个参数没有任何前缀。 (参见@MrMage的回答也提示这一点。)
更好的命名方法甚至可以是setTableBoundsByHeight::
,例如,更符合Apple命名约定。