如何从 UIView 的某些部分删除边框?

Posted

技术标签:

【中文标题】如何从 UIView 的某些部分删除边框?【英文标题】:How to remove border from some part of UIView? 【发布时间】:2013-03-13 06:15:22 【问题描述】:

我有一个包含其他子视图的UIView。我正在为此UIView 应用边框,并将边框应用于整个UIView。为此,请参见第一张图片。

但不希望标题周围出现"Leaderboard" 的边框。我怎样才能只删除该部分的边框。请参阅下图,其中看到标题排行榜周围没有边框..

【问题讨论】:

你需要自定义你的视图。就像一个视图将包含标题“Leader view”,而另一个视图将包含原始内容.. 可以自定义视图或绘制自定义视图 【参考方案1】:

不,CALayer 边框不支持这种行为。

但是如果你需要实现这个,你可以尝试另一种方法, 尝试在主视图的每一侧添加一个 n 点宽的不透明子视图,并将所需的边框颜色作为其背景颜色。

添加此代码:

CGSize mainViewSize = theView.bounds.size;
CGFloat borderWidth = 2;
UIColor *borderColor = [UIColor redColor];
CGFloat heightfromTop = 25;
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, heightfromTop borderWidth, mainViewSize.height-heightfromTop)];
UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(mainViewSize.width - borderWidth, heightfromTop, borderWidth, mainViewSize.height-heightfromTop)];
leftView.opaque = YES;
rightView.opaque = YES;
leftView.backgroundColor = borderColor;
rightView.backgroundColor = borderColor;

[mainView addSubview:leftView];
[mainView addSubview:rightView];

这只会在两侧添加边框。对顶部和底部也重复相同的想法。

NB : heightfromTop 是您不希望出现边框视图的顶部的高度,您可以根据需要更改它

【讨论】:

但是可以自定义视图或者绘制自定义视图 @MidhunMP 是的,当然。查看我编辑的答案,有一个很棒的方法 @MicRO.. 但我不会得到视图底角的圆角 @Shaunak 是的,您可以在另一个parentView 中添加这些整个视图(主视图和所有边框子视图)并设置其角半径以使其圆润!有意义吗? 我不明白..我可以将圆角半径设置为包含主视图的整个视图,但是如何为圆形部分设置边框颜色?【参考方案2】:

您可以将UIView 子类化并实现drawRect,例如:

- (void)drawRect:(CGRect)rect
       
      float borderSize = 3.0f;

     //draw the bottom border
     CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
     CGContextFillRect(context, CGRectMake(0.0f, self.frame.size.height - borderSize, self.frame.size.width, borderSize));

     //draw the right border
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextFillRect(context, CGRectMake(0.0f,0.0f, borderSize,self.frame.size.height));

     //draw the left border 
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextFillRect(context, CGRectMake(self.frame.size.width - borderSize,0.0f, borderSize,self.frame.size.height));

现在,您需要使用子类UIView 来创建所需的视图。

【讨论】:

以上是关于如何从 UIView 的某些部分删除边框?的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制部分边框?

在某些 VC 与其他 VC 中,如何将横幅 UIView 显示为 UINavigationController 的一部分

IOS 7:从分组样式 UITableView 的一部分中删除边框

如何删除自定义uiview中的边框线?

如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?

UIView边框覆盖子视图?