IOS半透明NavigationController修复

时间:2013-03-25 19:56:33

标签: ios objective-c xcode

我在ios应用程序中使用半透明导航控制器。

问题是我的CollectionViewcontroller在半透明的NavigationController下移动。但当我将其更改为blacknavigationController时,它会得到纠正。

我希望translucentNavigationController的行为类似于blackNavigationController吗?我不知道如何实现这个目标?

谢谢。 enter image description here

enter image description here

我已经尝试将节标题添加到集合视图中,但问题是在设备旋转时标题的大小保持不变。

我的轮换处理代码 @j_mcnally

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{

    UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication]  statusBarOrientation];
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
    {
        NSLog(@"Is in portrait Mode");
        self.collectionView.contentInset=UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f);
        self.collectionView.scrollIndicatorInsets=UIEdgeInsetsMake(45.0f, 0.0f, 0.0f,  0.0f);
    }
    else{
        NSLog(@"Is in landscape Mode");

        self.collectionView.contentInset=UIEdgeInsetsMake(32.0f, 0.0f, 0.0f, 0.0f);
        self.collectionView.scrollIndicatorInsets=UIEdgeInsetsMake(33.0f, 0.0f, 0.0f,  0.0f);
}

}

使用旋转处理问题似乎是固定的,除非我进行左旋转然后右旋转。结果就是这样 enter image description here

4 个答案:

答案 0 :(得分:1)

这里的问题是scrollview的框架。当UINavigationBar是半透明时,布局不计算导航栏的高度,因此scrollview的框架从0,0而不是0,44开始。解决方案是执行您已经执行的操作,但更改内容插入以抵消网格。

enter image description here

更改顶部内容插件以反映导航栏的大小。这将允许您的内容在导航栏下滚动,而不会从导航栏下方开始。您可能需要关闭视图上的自动布局才能获得此菜单选项。我个人不使用autolayout,因为它破坏了5.x兼容性。

如果在旋转时留下太多空间,则应调整shouldAutorotate函数中的插入,或者可以在NSNotificationCenter中订阅旋转事件。

根据您的新问题,即使您增加偏移量,您的视图也会从顶部移动到32.0f,当您旋转并将插入更改为44.0f时,它不会重置scrollviews内容偏移量。所以你的12.0f,即使向下滚动也会让你移动到正确的位置0.0f。

因此,您可以在每次旋转时将contentoffset重置为0.0,或者仅当视图在视图中仅部分滚动时才会将其重置为0.0。所以如果contentOffset是< 44.0f然后将其设置为0.0,如果它更大的话就单独留下它。或者,每次将视图旋转回肖像时,您都可以重新计算新的偏移+ 12.0f,反之亦然,以补偿插入的差异。

答案 1 :(得分:0)

  

我已经尝试将节标题添加到集合视图中,但问题是在设备旋转时标题的大小保持不变。

您可以在tableView:heightForHeaderInSection:check the current device orientation根据当前方向返回不同的高度。

答案 2 :(得分:0)

你可以拍黑色并调整alpha属性。

self.navigationController.navigationBar.tintColor = [UIColor blackColor];
self.navigationController.navigationBar.alpha = 0.2f;

答案 3 :(得分:-1)

我会做一个viewcontroller并为它添加一个集合表。然后你可以调整到你需要的任何东西。您可能使用了collectionViewController模板,因此现在控制较少。

执行此操作后,将收集表放在导航栏下。