我正在创建一个UISegmentedControl替代品,以便它可以与您自己的自定义图像一起使用。由于分隔符需要在两侧具有不同的颜色,因此我决定给中间项目两个边框。
现在要显示UISegmentedControl替代品,我计算了一个项目可用的宽度(frame.size.width / numberOfItems)。然后我创建了一个带有自定义背景图像(可拉伸的中间段图像)的UIButton。下一步是定位所有内容。因为当您选择一个项目时,1像素的分隔符需要可见,所以我给每个项目比实际应该有的大1像素的框架。因此,下一个项目向左重叠1像素。
使用此结果,我获得了一个几乎完美的自定义UISegmentedControl (retina): 现在看起来非常好,但是当添加更多/少的分段时,一切都会改变。顺便说一下,这是一个300像素宽的控件,所以每个段落占据25像素的空间。如果我将该数字更改为13,则会显示如下内容: 请注意,“3”和“4”之间的轻微不同边框。(因为像素加倍,在非retina上更容易发现) 我认为这是由于每个段落得到的空间不太好造成的。(300 / 13 = 23.0769)应该认为可拉伸图像会适应此问题,对吗?分隔符的宽度恰好为1px,我将帧更改1px,因此两个分隔符应该被放置在彼此完全重合的位置,但实际情况绝对不是如此。
有人知道为什么会出现这种情况,更重要的是有没有办法解决这个问题?
现在要显示UISegmentedControl替代品,我计算了一个项目可用的宽度(frame.size.width / numberOfItems)。然后我创建了一个带有自定义背景图像(可拉伸的中间段图像)的UIButton。下一步是定位所有内容。因为当您选择一个项目时,1像素的分隔符需要可见,所以我给每个项目比实际应该有的大1像素的框架。因此,下一个项目向左重叠1像素。
segmentRect = CGRectMake(indexOfObject * (self.frame.size.width / numberOfSegments), 0, (self.frame.size.width / numberOfSegments) + 1, self.frame.size.height);
使用此结果,我获得了一个几乎完美的自定义UISegmentedControl (retina): 现在看起来非常好,但是当添加更多/少的分段时,一切都会改变。顺便说一下,这是一个300像素宽的控件,所以每个段落占据25像素的空间。如果我将该数字更改为13,则会显示如下内容: 请注意,“3”和“4”之间的轻微不同边框。(因为像素加倍,在非retina上更容易发现) 我认为这是由于每个段落得到的空间不太好造成的。(300 / 13 = 23.0769)应该认为可拉伸图像会适应此问题,对吗?分隔符的宽度恰好为1px,我将帧更改1px,因此两个分隔符应该被放置在彼此完全重合的位置,但实际情况绝对不是如此。
有人知道为什么会出现这种情况,更重要的是有没有办法解决这个问题?