【问题标题】:iOS how to dim UITabBar and UINavigationController without hiding them?iOS 如何使 UITabBar 和 UINavigationController 变暗而不隐藏它们?
【发布时间】:2012-01-13 17:50:16
【问题描述】:

我正在尝试在夜间降低我的应用程序的亮度,虽然我可以很好地控制我的 UIView,但 UITabBarUINavigationController 给我带来了麻烦。

如何使UITabBarUINavigationController 变暗而不隐藏它们?

【问题讨论】:

    标签: iphone objective-c ios uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    对于 UITabBar 你可以这样做:

    tabBar.alpha = 0.5
    

    UINavigationController 不是一个视图,它是一个控制器,因此当你说你想调暗它是没有意义的。如果您的意思是要使 UINavigationBar 变暗,您可以这样做:

    navigationController.navigationBar.alpha = 0.5;
    

    或者,如果您想使 navigationController 中的所有内容变暗:

    navigationController.view.alpha = 0.5;
    

    【讨论】:

    • 根据您的情况,使用此方法可以很容易地对其进行动画处理。
    • 这当然取决于相关视图下方的颜色。很可能是窗口的颜色,但不一致。
    【解决方案2】:

    我将创建一个UIView 的子类,以提供纯黑色视图。接下来,您将不得不通过视图传递触摸事件,因此您需要覆盖-pointInside:withEvent:,返回 NO 并将消息传递给超级视图。将此视图作为您尝试变暗的视图的子视图插入。使用alpha属性控制调光效果。

    编辑我很无聊。这是我刚刚拼凑起来的东西。

    IADimmingView.h

    #import <UIKit/UIKit.h>
    
    @interface IADimmingView : UIView
    
    - (id)initWithContainingView:(UIView *)view;
    - (void)dim;
    
    @end
    

    IADimmingView.m

    #import "IADimmingView.h"
    
    @interface IADimmingView ()
    
    @property (strong, nonatomic) UIView *containingView;
    
    @end
    
    #pragma mark -
    
    @implementation IADimmingView
    
    @synthesize containingView;
    
    - (id)initWithContainingView:(UIView *)view
    {
        NSParameterAssert(view);
    
        self = [super initWithFrame:view.frame];
    
        if (!self)
            return nil;
    
        containingView = view;
        self.backgroundColor = [UIColor blackColor];
    
        return self;
    }
    
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    {
        [self.containingView pointInside:point withEvent:event];
    
        return NO;
    }
    
    - (void)dim
    {
        [self.containingView addSubview:self];
    }
    
    @end
    

    在您的视图控制器中,它是这样使用的...

    IADimmingView *dimmingView = [[IADimmingView alloc] initWithContainingView:self.tabBarController.tabBar];
    dimmingView.alpha = 0.75;
    [dimmingView dim];
    

    【讨论】:

      【解决方案3】:

      您可以自定义它们。这里被问了很多次,例如:Custom colors in UITabBar

      只需对导航栏执行相同操作即可。

      【讨论】:

      • 那是过时的材料。不过,外观 API 是个好主意。
      • 你是对的,offcorce,但有时初学者不能做我们建议他们做的事情。以任何理由。所以,在这种情况下,他们需要另一种选择。这只是一个,曾经对我有用。
      【解决方案4】:

      这就是navigationBardocumentation 中的声明方式:

      由导航控制器管理的导航栏。 (只读)

      允许使用 UINavigationBar 类的方法和属性自定义导航栏的外观,但您绝不能更改其框架、边界或 alpha 值或直接修改其视图层次结构。要显示或隐藏导航栏,您应该始终通过导航控制器更改其 navigationBarHidden 属性或调用 setNavigationBarHidden:animated: 方法。

      这是我用来解决此问题的答案:Visible buttons with transparent navigation bar

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        相关资源
        最近更新 更多