You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中带标签的柱状图UIView设置透明后无法重新显示的问题求助

Objective-C中带标签的柱状图UIView设置透明后无法重新显示的问题求助

嗨,看起来你遇到的问题核心是没正确找到你创建的那些bar视图,导致后续设置颜色和alpha的代码根本没执行到!我帮你拆解一下问题和解决方案:

1. 最关键的错误:视图查找的父容器不对

你创建bar的时候,是把它们添加到self.graphView这个子视图里的:

[self.graphView addSubview:localBarView];

但后续更新的时候,你却在self.view里找带tag的视图:

grabBar =(UIView*)[self.view viewWithTag:tag];

这就导致grabBar其实是nil,你的所有设置自然不会生效!

2. 修正方案:找对父视图

把查找视图的代码改成从self.graphView里找,而不是self.view,同时可以加日志验证是否找到视图:

int i;
for (i = 0; i < _numBars; i++) {
    int tag = 10 + (100 * i);
    // 从正确的父视图graphView中查找bar
    UIView *grabBar = (UIView*)[self.graphView viewWithTag:tag];
    if (grabBar) { // 确认找到视图再操作
        NSLog(@"成功找到tag为%d的bar", tag);
        int val = [barValues[i] intValue];
        
        // 恢复可见性
        grabBar.backgroundColor = [UIColor blueColor];
        grabBar.alpha = 1.0;
        
        // 计算并更新bar高度
        CGRect barFrame = grabBar.frame;
        barFrame.size.height = [self calculateHeightFromVal];
        grabBar.frame = barFrame;
    } else {
        NSLog(@"未找到tag为%d的bar,请检查tag设置是否正确", tag);
    }
}

3. 可选优化:简化初始设置

初始创建bar的时候,不需要同时设置clearColor和alpha=0,选一个就行,比如只设置alpha=0,这样后续恢复更简洁:

// 初始创建时的简化设置
localBarView.backgroundColor = [UIColor blueColor];
localBarView.alpha = 0.0; // 只隐藏,颜色保留
[self.graphView addSubview:localBarView];

4. 额外建议:规范tag的定义

硬编码10、100这些tag值容易出错,建议用宏定义统一管理:

#define kBarBaseTag 10
#define kBarTagStep 100

创建时:localBarView.tag = kBarBaseTag + i * kBarTagStep;
更新时:int tag = kBarBaseTag + i * kBarTagStep;
这样后续调整tag规则会更方便。

你按照这个修正后,应该就能看到bar正常显示并更新高度了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:18:10