我的登录视图有一个子视图,其中UIActivityView
和UILabel
表示“正在登录...”。此子视图的拐角不是圆角。我怎样才能让它们成为圆形?
有没有办法在我的xib中做到这一点?
答案 0 :(得分:1185)
试试这个
#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now :)
...
view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;
注意:如果您尝试将圆角应用于UIViewController
的视图,则不应在视图控制器的构造函数中应用它,而应在-viewDidLoad
之后的view
中应用它实际上是实例化的。
答案 1 :(得分:255)
您还可以使用界面构建器的 用户定义的运行时属性 功能将密钥路径layer.cornerRadius
设置为值。请确保包含QuartzCore
库。
此技巧也适用于设置layer.borderWidth,但它不适用于layer.borderColor
,因为这需要CGColor
而不是UIColor
。
您将无法在故事板中看到效果,因为这些参数是在运行时评估的。
答案 2 :(得分:60)
现在你可以在UIView中使用swift类别(图片中的代码)和@IBInspectable在故事板上显示结果(如果你使用的是类别,只使用cornerRadius而不是layer.cornerRadius作为关键路径。
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
答案 3 :(得分:51)
简短回答:
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)
您可以通过更改视图cornerRadius
的{{1}}属性为其提供圆角。
layer
较大的半径值会产生更多圆角
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
都是equivalent。只是第一个与masksToBounds
一起使用,第二个与UIView
一起使用。
答案 4 :(得分:43)
与Ed Marty所做的不同:
#import <QuartzCore/QuartzCore.h>
[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];
你需要setMasksToBounds来加载来自IB的所有对象......我遇到了一个问题,我的视图已经四舍五入,但是没有来自IB的对象:/
这固定了它= D希望它有所帮助!
答案 5 :(得分:26)
正如this blog post中所述,这是一种绕过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];
}
关于它的很酷的部分是你可以选择你想要四舍五入的角落。
答案 6 :(得分:19)
您需要先导入标题文件<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
,否则可能无法显示效果。
答案 7 :(得分:9)
您可以使用以下自定义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
}
}
}
答案 8 :(得分:6)
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];
答案 9 :(得分:3)
view.layer.cornerRadius = 25
view.layer.masksToBounds = true
答案 10 :(得分:3)
@IBDesignable
class DesignableView: UIView {
}
extension UIView
{
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
答案 11 :(得分:2)
请导入Quartzcore framework
,然后您必须将setMaskToBounds
设置为TRUE
这一非常重要的一行。
然后:[[yourView layer] setCornerRadius:5.0f];
答案 12 :(得分:2)
UIView* viewWithRoundedCornersSize(float cornerRadius,UIView * original)
{
// Create a white border with defined width
original.layer.borderColor = [UIColor yellowColor].CGColor;
original.layer.borderWidth = 1.5;
// Set image corner radius
original.layer.cornerRadius =cornerRadius;
// To enable corners to be "clipped"
[original setClipsToBounds:YES];
return original;
}
答案 13 :(得分:1)
在SwiftUI中,您可以直接在所需的任何cornerRadius
上使用View
修饰符。
例如这个问题:
Text("Signing In…")
.padding(16)
.background(Color.red)
.cornerRadius(50)
请注意,不再有类似菱形的半径,因此,即使将cornerRadius 设置为高度的一半以上,它也会平滑地变圆。
答案 14 :(得分:1)
如果圆角不能在 viewDidload()中工作,最好在 viewDidLayoutSubview()
中编写代码-(void)viewDidLayoutSubviews
{
viewTextfield.layer.cornerRadius = 10.0 ;
viewTextfield.layer.borderWidth = 1.0f;
viewTextfield.layer.masksToBounds = YES;
viewTextfield.layer.shadowRadius = 5;
viewTextfield.layer.shadowOpacity = 0.3;
viewTextfield.clipsToBounds = NO;
viewTextfield.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
}
希望这有帮助!
答案 15 :(得分:1)
在对象中以编程方式执行此操作
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;][1]
[self.view addSubview:view];
我们也可以从stoaryboard这样做。
layer.cornerRadius Number 5
答案 16 :(得分:0)
为圆形视图设置cornerRadious属性
set masksToBounds布尔值的图片不会仍然在角半径边界外绘制
view.layer.cornerRadius = 5;
view.layer.masksToBounds = YES;
答案 17 :(得分:0)
在Swift 4.2和Xcode 10.1中
Engine.ClassA.InfoAboutPerfomedInstruction
答案 18 :(得分:0)
您也可以使用图片:
UIImage *maskingImage = [UIImage imageNamed:@"bannerBarBottomMask.png"];
CALayer *maskingLayer = [CALayer layer];
maskingLayer.frame = CGRectMake(-(self.yourView.frame.size.width - self.yourView.frame.size.width) / 2
, 0
, maskingImage.size.width
, maskingImage.size.height);
[maskingLayer setContents:(id)[maskingImage CGImage]];
[self.yourView.layer setMask:maskingLayer];
答案 19 :(得分:-1)
使用UIView扩展:
extension UIView {
func addRoundedCornerToView(targetView : UIView?)
{
//UIView Corner Radius
targetView!.layer.cornerRadius = 5.0;
targetView!.layer.masksToBounds = true
//UIView Set up boarder
targetView!.layer.borderColor = UIColor.yellowColor().CGColor;
targetView!.layer.borderWidth = 3.0;
//UIView Drop shadow
targetView!.layer.shadowColor = UIColor.darkGrayColor().CGColor;
targetView!.layer.shadowOffset = CGSizeMake(2.0, 2.0)
targetView!.layer.shadowOpacity = 1.0
}
}
用法:
override func viewWillAppear(animated: Bool) {
sampleView.addRoundedCornerToView(statusBarView)
}
答案 20 :(得分:-4)
ON Xcode 6 你的尝试
self.layer.layer.cornerRadius = 5.0f;
或
self.layer.layer.cornerRadius = 5.0f;
self.layer.clipsToBounds = YES;