我已使用 cocoacontrols.com 中的 BASequenceControl ,使用方向主题实施了 UISegmentedControl 。< / p>
我添加了 BASequenceControl.h 和 BASequenceControl.m 类以及 GitHub 所需的图片
大。它对我来说很好。但是我对最后一段节提示有疑虑。
显示最后一段节的垃圾空间。
原始屏幕截图
我需要这样
我已实施的代码
#import "BASequenceControl.h"
BASequenceControl *bASequenceControl = [[BASequenceControl alloc] init];
bASequenceControl.frame = CGRectMake(10, 10, 200, 44);
[bASequenceControl addSegmentWithTitle:@"First" animated:NO];
[bASequenceControl addSegmentWithTitle:@"Second" animated:NO];
bASequenceControl.leftMargin = -22;
bASequenceControl.rightMargin = 0;
bASequenceControl.overlapWidth = 22;
[self.view addSubview:bASequenceControl];
对此有任何帮助表示赞赏。
感谢。
答案 0 :(得分:2)
这是一个非常简单的修复方法。您必须编辑BASequenceControl.m文件,或者您可以复制该类并重命名它。
导致问题的行在drawRect:
中,它基本上在控件的整个背景上绘制灰色箭头。在空白处创建漂亮的渐变。
[passiveSegmentImage drawInRect:CGRectMake(-passiveSegmentImage.size.width, 0,
w + 2 * passiveSegmentImage.size.width, h)];
您可以将其更改为:
[passiveSegmentImage drawInRect:CGRectMake(0, 0,
w, h)];
现在你必须告诉控件它不应该是不透明的。像这样更新初始化程序。
- (void)awakeFromNib {
_selectedSegmentIndex = -1;
[self setOpaque:NO];
[super awakeFromNib];
}
- (id)init {
if ((self = [super init])) {
[self setOpaque:NO];
_selectedSegmentIndex = -1;
}
return self;
}
这非常快速和肮脏,您可以使用属性进行此可设置。然后向BaseAppKit提交拉取请求,但我会留给您。这是一个要点,您可以直接在BASequenceControl.m中复制和粘贴以修复悬垂。 https://gist.github.com/4632686
修改:确保您使用init
作为初始值设定项,然后使用setFrame:
(我不确定为什么initWithFrame:
未在类中被覆盖。)
BASequenceControl *control = [[BASequenceControl alloc] init];
[control setFrame:CGRectMake(0, 0, 300, 40)];
戏剧效果的绿色背景
答案 1 :(得分:0)
如何使用这样的面具:
掩盖您的SegmentedControl