【问题标题】:Q:UITableView scrollViewDidScroll function to change the custom navigationBar's alphaQ:UITableView scrollViewDidScroll函数改变自定义navigationBar的alpha
【发布时间】:2016-07-26 08:09:50
【问题描述】:

在我的view controller 中,我有一个tableView,并且我还在我的view controller 的视图上添加了一个自定义导航栏,我想淡化我的自定义导航栏的alpha,但它似乎没有用,然后我打印了自定义导航栏的alpha,它显示正常,但我的自定义导航栏看起来在其alpha 上没有变化,这是我的代码:

#pragma mark -- scorllView delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(scrollView == _tableview){

        CGFloat currentOffsetY = scrollView.contentOffset.y;
        // 0 ~ 358  -20 ~ 338
        float alpha_of_scroll = (currentOffsetY + 20) / 358.0;

        NSLog(@"%f", alpha_of_scroll);

        _narBarView.alpha = 1 - alpha_of_scroll;

        NSLog(@"%f", _narBarView.alpha);
    }
}

顺便说一句,我已经测试过使用reactive cocoa,它与scrollViewDidScroll 函数显示相似。

【问题讨论】:

    标签: ios uitableview scroll alpha


    【解决方案1】:

    试试这个:

    - (void)viewDidLoad {
        [super viewDidLoad];
        UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, -20, CGRectGetWidth(self.navigationController.navigationBar.bounds), CGRectGetHeight(self.navigationController.navigationBar.bounds) + 20)];
        overlay.userInteractionEnabled = NO;
        overlay.backgroundColor = [UIColor orangeColor];
        [self.navigationController.navigationBar insertSubview:overlay atIndex:0];
    
        [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    }
    
    
    #pragma mark -- scorllView delegate
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        if(scrollView == self.myTableView){
            CGFloat offsetY = scrollView.contentOffset.y;
            NSLog(@"%f", offsetY);
            if (offsetY > -64) {
                if (offsetY >= 0) {
                    [self setNavigationBarAlpha:0];
                } else {
                    [self setNavigationBarAlpha:(-offsetY / 64)];
                }
            } else {
                [self setNavigationBarAlpha:1];
            }
        }
    }
    
    - (void)setNavigationBarAlpha:(CGFloat)alpha {
        [[self.navigationController.navigationBar subviews] enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) {
            obj.alpha = alpha;
        }];
    }
    

    【讨论】:

    • 这个方法我在某个地方找到了,但我的navgationBar 是我自定义创建的,这是我controller's 视图上的一个`视图`。
    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2011-01-16
    相关资源
    最近更新 更多