最近,我更新了一个圆角段控件,使每个段具有不同的宽度。
我遇到的问题是,最后一个段与分段控件的末尾不正确地对齐
我刚刚为这个示例使用了以下代码(seg是我的分段控件):
seg.layer.borderWidth = 1
seg.layer.cornerRadius = seg.bounds.height / 2
seg.layer.masksToBounds = true
seg.apportionsSegmentWidthsByContent = true
如果删除masksToBounds行,则可以看到右段没有到达分段控件的边缘。
有什么办法解决这个问题吗?
发布于 2019-01-30 22:12:32
这似乎是由UISegmentedControl
中的呈现错误引起的,当apportionsSegmentWidthsByContent = true
出现时。通过操作控件的CALayer
,我找不到一个简单的解决方法。您可以使用UIStackView
创建一个自定义控件来模拟UISegmentedControl
。
你也应该向苹果发送雷达。
发布于 2022-05-25 07:33:08
我不知道这是否仍然会影响iOS,但Xamarin.iOS的一个解决办法是:
重写UISegmentView
,计算最后一个段元素的文本宽度并更新其宽度。
C#中的示例代码:
public class MySegmentedControl : UISegmentedControl
{
public override void MovedToSuperview ()
{
// Fix truncation of last element
// when ApportionsSegmentWidthsByContent = true
if (ApportionsSegmentWidthsByContent) {
RecalculateLastSegmentWidth ();
}
}
private void RecalculateLastSegmentWidth()
{
var font = UIFont.FromName("Helvetica", 12);
var lastSegment = NumberOfSegments - 1;
var segmentTitle = TitleAt(lastSegment);
var segmentWidth = segmentTitle.StringSize(font).Width + 20;
SetWidth(segmentWidth, lastSegment);
}
}
https://stackoverflow.com/questions/54451559
复制