【问题标题】:UISegmentedControl with square corners带有方角的 UISegmentedControl
【发布时间】:2011-12-06 01:16:30
【问题描述】:

我想用一个子类修改 UISegmentedControl 以删除圆角。我似乎无法设置cornerRadius。使 SegmentedControl 比屏幕更宽(因此“切掉”角落)不是一种选择,因为我有 4 或 5 个段,然后它们的大小会有所不同。

有没有办法做到这一点?

谢谢

【问题讨论】:

    标签: ios ios5 uisegmentedcontrol cornerradius


    【解决方案1】:

    要制作角正方形,请使用以下代码:

    segmentContrl.layer.borderColor=*anycolor*.CGColor;
    segmentContrl.layer.cornerRadius = 0.0;
    segmentContrl.layer.borderWidth = 1.5f;
    

    【讨论】:

    • 这适用于我的目的,但不需要cornerRadius部分。
    • 然后忽略cornerRadius。
    • 这是唯一的非黑客。
    【解决方案2】:

    如果第一个和最后一个片段的“裁剪”部分存在问题,则另一种方法可能是裁剪整个第一个和最后一个片段(您已将其制作为虚拟未使用的片段)。这样,您仍然可以为每个段保持一个共同的大小。

    【讨论】:

    • 简单优雅。这样做的好处是,您在视觉上仍然在边缘有垂直线。
    • 不错!在布局子视图中,我取分段控件的宽度,通过分割段数得到一个段的宽度,将掩码视图的宽度设置为 (num segments - 2) * width + 2 (left right border) 和 I我是金子!
    【解决方案3】:

    只需使用内置的自定义方法并为每个段状态设置背景图像。这将完全覆盖边界。如果背景图像是方形的,那么您的分段控件将显示为方形。对您要自定义的每个段状态使用以下代码。

    [segmentedControl setBackgroundImage:[UIImage imageNamed:@"square-background-image-selected"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

    【讨论】:

    • 您可能还需要为正常控制状态提供背景图像,否则将不会应用所选控制状态的背景图像
    【解决方案4】:

    您可以设置线段的宽度(使用setWidth:forSegmentAtIndex:),这样您就可以轻松地使左右两端的线段比其他线段更大(比如大 10 像素),然后您可以从任一端裁切 10 像素并获得正方形角落。您不必使其大于屏幕宽度,而是将其放在 UIView 中并使用它来裁剪末端。

    另一方面,您可以使用 UIControl 中的一组自定义 UIButton 来制作您自己的分段控件。

    【讨论】:

    • 决定使用 10px 版本,因为您没有多余的段和索引。
    • 2 个问题:1) 如何使用 UIView 裁剪末端。 2) 你将如何使用 UIControl 内的 UIButtons 制作你自己的分段控件。
    • @ladookie 1) 使控件比父视图更宽,在父视图上设置 clipsToBounds,2) 创建一个包含 UIButtons 数组的 UIControl 的子类并实现 UISegmentedControl 的方法(只是你需要的)使用按钮使你的子类表现得像一个 UISegmentedControl 除了圆角。
    【解决方案5】:

    在界面生成器中完成此操作的另一种方法:

    拖一个 UIView 对象到你的 UIViewController,这可能是你 UIView 的一个子视图。

    将 UISegmentedControl 拖动为 UIView 的子视图。分段控件现在应该在您的 UIViewController 对象列表中缩进。 (见下面的截图)。

    调整 SegementedControl 的大小,使其框架位于 UIView 对象的边界之外。在我的例子中,我将 SegementedControl 的框架设置为 X = -10,并将 SegementedControl 的宽度添加了 +20,以便分段控件的总宽度比 UIView 对象大 20。 (希望下面的屏幕截图有所帮助)。

    我还为 UIView 对象和 SegmentedControl 调整了以下设置: UIView:选中 Clip SubViews,取消选中 AutoResize Subviews。 SegementedControl:取消选中 Clip SubViews,取消选中 AutoResize Subviews。

    【讨论】:

    • 这个解决方案简洁明了,非常适合两个大小相等的段的情况。
    • 非常简单的解决方案,如果以编程方式创建它也可以工作 - 这个绝妙的想法做得很好!
    猜你喜欢
    • 2013-01-19
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多