我试图在root view controller
内的UINavigationController
内显示自定义视图,例如操作表,但我总是因为我没有帐户而模糊了底部对于UINavigationBar
+ status bar
身高。
例如,以下代码将隐藏customView
底部的64个点:
CGFloat height = [UIScreen mainScreen].bounds.size.height;
[UIView animateWithDuration:0.5 animations:^{
customView.center = CGPointMake(width / 2.0, height - customViewHeight / 2.0);
}];
我可以使用setFrame
代替center
,但这无关紧要,因为它会或多或少地给我相同的结果。
我知道使用像-64
pts这样的常量是不可取的,所以有没有将点转换为实际的屏幕坐标?什么是最佳做法?
编辑(可能是其他问题)
我试图从屏幕底部外侧看到一个视图,就像UIActionSheet
一样,每当我尝试这样做时,我总会遇到同样的问题。
我尝试将初始子视图frame
origin.y
设置为屏幕高度,并将子视图设置为(screenHeight - subviewHeight)
的动画,这就是为什么我总是遇到我的问题底部64个CGPoints模糊不清。
执行此类实施的最佳方法是什么?我尝试过搜索示例代码,但我只看到使用CGPoint height = 480.0 - subviewHeight;
等高度的代码,我听说这是不好的做法。
答案 0 :(得分:1)
一种方法
@implementation UIView (XXScreenConversions)
- (CGPoint)xx_pointFromScreenPoint:(CGPoint)point {
CGPoint inWindow = [self.window convertPoint:point fromWindow:nil];
return [self.window convertPoint:inWindow toView:self];
}
- (CGPoint)xx_screenPointFromPoint:(CGPoint)point {
CGPoint inWindow = [self.window convertPoint:point fromView:self];
return [self.window convertPoint:inWindow toWindow:nil];
}
@end
答案 1 :(得分:1)
除了Adam的回复之外,我认为你不应该依赖计算中的屏幕高度。因为你可能正在添加你的子视图的超级视图实际上并不是全屏,所以它正在推动底部关闭。
如果您正在投掷各地,最好抓住您正在添加的视图的view.bounds
并将其用于帧计算。
如果您正在使用自动布局(如果没有,请了解它,因为它非常棒),请使用topLayoutGuide
。
答案 2 :(得分:0)