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
相关产品推荐
相关产品推荐

