ios - 寻找 View 的中心

标签 ios uiview uiviewcontroller uinavigationbar

我有一个带有 2 个 ViewControllers 的 iphone 应用程序。两个屏幕( View Controller )都显示加载屏幕。我以编程方式创建加载屏幕:

 UIView *loadingScreen = [[UIView alloc] initWithFrame:CGRectMake(100,200,144,144)];
 loadingScreen.center = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0);
     //{.. Other customizations to loading screen
     //   ..}
 [self.view addSubview:loadingScreen];

出于某种原因,第二个 View Controller 的 loadingScreen 明显较低,并且没有位于屏幕中央。第一个 View Controller 工作完美,并且像我想要的那样死在中心。

第二个 View Controller 是一个 UITableView,它显示 uinavigationbar,而第一个 viewcontroller 不显示 uinavigationbar。此外,我在我的应用中使用 Storyboard。

我已经在这两个实例中输出到 NSLog self.view.frame.size.heightloadingScreen.center 并且它们具有相同的坐标! 所以,不确定为什么它显示得更低。知道为什么第二个 loadingScreen 较低以及如何修复吗?谢谢!

最佳答案

您提到一个屏幕显示 UINavigationBar,而另一个屏幕则不显示。当您显示导航栏时,它会偏移 View 的其余部分 - 在本例中是向下移动。

有两个快速修复方法。您可以将中心点向上调整 UINavigationBar 的大小(65 点 - 除非它是自定义 UINavigationBar 并且您已更改其大小),也可以在属性检查器中将“调整 ScrollView 插图”值设置为 false。

后者可能是最简单的,也是最值得推荐的。但请注意,UITableView 的顶部现在将位于 UINavigationBar 的下方。

Xcode example

我最后要注意的是,如果您想以编程方式执行此操作,而不是在 UITableView 的委托(delegate)中,您可以调用

- (BOOL)automaticallyAdjustsScrollViewInsets
{
    return NO;
}

关于ios - 寻找 View 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849603/

相关文章:

iphone - UI导航按钮更改

ios - 关闭 NSURLConnection 的正确方法

两个 Controller 之间的 iOS 对象或委托(delegate)?

objective-c - iOS - 放大 View (提供屏幕截图)

ios - 为什么无法使用 class_getProperty 获取 UIView.frame 属性?

iphone - iOS 7 错误警告 : Attempt to dismiss from view controller <UINavigationController: 0x1568db40> while a presentation or dismiss is in progress

ios - 在 iOS 上,一个 ViewController 的 viewDidLoad 中, subview 的数量是 0?哪种方法可以显示填充的数字?

ios - 重构大型方法以在 UIViewController 中创建自定义 UIView

ios - 递归调用viewDidLoad,崩溃

ios - 将文本标签添加到绘制的形状