我的登录视图包含一个子视图,其中包含一个 UIActivityView 和一个标签UILabel说“正在登录中...”。这个子视图的角没有圆角。如何使它们变成圆角?
是否有办法在我的xib文件中完成它?
我的登录视图包含一个子视图,其中包含一个 UIActivityView 和一个标签UILabel说“正在登录中...”。这个子视图的角没有圆角。如何使它们变成圆角?
是否有办法在我的xib文件中完成它?
尝试这个
#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now :)
...
view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;
注意:如果您试图将圆角应用于 UIViewController 的视图,它不应该应用在视图控制器的构造函数中,而是在-viewDidLoad中,在实际实例化view之后应用。
layer.cornerRadius的值。但请确保包括QuartzCore库。
这个技巧同样适用于设置layer.borderWidth,但对于layer.borderColor不起作用,因为它需要CGColor而不是UIColor。
您将无法在故事板中看到效果,因为这些参数在运行时评估。

剪裁子视图(Clip Subviews)选项。 - Peter简短回答:
myView.layer.cornerRadius = 8
myView.layer.masksToBounds = true // optional
如果您已经看到足够的内容来解决问题,那么您可能已经找到答案了。我添加这个答案是为了更好地解释为什么事情会做什么。
如果您从普通的UIView开始,它具有方形角落。
let blueView = UIView()
blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
blueView.backgroundColor = UIColor.blueColor()
view.addSubview(blueView)
通过更改视图的layer的cornerRadius属性,可以使其具有圆角。
blueView.layer.cornerRadius = 8
半径值越大,圆角就越圆润。
blueView.layer.cornerRadius = 25
数值越小,圆角越少。
blueView.layer.cornerRadius = 3
这可能已经足以解决您的问题了。然而,有时视图可以有一个子视图或子图层超出视图的边界。例如,如果我添加一个这样的子视图
let mySubView = UIView()
mySubView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubView.backgroundColor = UIColor.redColor()
blueView.addSubview(mySubView)
或者如果我像这样添加一个子层
let mySubLayer = CALayer()
mySubLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubLayer.backgroundColor = UIColor.redColor().CGColor
blueView.layer.addSublayer(mySubLayer)
那么我最终会得到
现在,如果我不想让内容超出边界,可以这样做
blueView.clipsToBounds = true
或者这个
blueView.layer.masksToBounds = true
这会产生以下结果:
clipsToBounds和masksToBounds是等效的。只是前者用于UIView,而后者用于CALayer。
blueView.frame.size.height/2)会得到一个完美的圆角。 - Johann Burgess现在你可以在UIView中使用一个快捷分类(下面是代码)并使用@IBInspectable在故事板中显示结果(如果您正在使用该类别,请仅使用cornerRadius而不是layer.cornerRadius作为关键路径)。
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}

@IBDesignable 进行标记,以在 IB 中获得实时预览!(更多信息请参见 http://nshipster.com/ibinspectable-ibdesignable/) - clozach#import <QuartzCore/QuartzCore.h>
[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];
你需要使用setMasksToBounds方法来加载所有从IB中获取的对象... 我遇到一个问题,我的视图被圆角处理,但是没有从IB中获取到的对象 :/
这个方法解决了我的问题 =D 希望它也能帮到你!
如这篇博客文章所述,这是一个用于给UIView的角落设置圆角的方法:
+(void)roundView:(UIView *)view onCorner:(UIRectCorner)rectCorner radius:(float)radius
{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:rectCorner
cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view.bounds;
maskLayer.path = maskPath.CGPath;
[view.layer setMask:maskLayer];
[maskLayer release];
}
最酷的部分是你可以选择哪些角要圆角化。
UIView类,该类还可以更改边框颜色和宽度。由于这是IBDesignalbe,您也可以在界面构建器中更改属性。
import UIKit
@IBDesignable public class RoundedView: UIView {
@IBInspectable var borderColor: UIColor = UIColor.white {
didSet {
layer.borderColor = borderColor.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 2.0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat = 0.0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
你需要先导入头文件 <QuartzCore/QuartzCore.h>
#import QuartzCore/QuartzCore.h>
[yourView.layer setCornerRadius:8.0f];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 2.0f;
[yourView.layer setMasksToBounds:YES];
不要忘记使用 -setMasksToBounds ,否则可能无法显示效果。
view.layer.cornerRadius = 25
view.layer.masksToBounds = true
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 200, 200)];
view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);
view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;
[self.view addSubview:view];
[view release];
cornerRadius属性应用于表格,而无需使用预先渲染的图像或在代码中设置它。 - djskinner