ios uiview layer

ios - ¿Agregar solo un borde superior a una UIView con Quartzcore/layer?



(7)

¿Es posible agregar un borde justo encima de una UIView? De ser así, ¿cómo?


Aquí hay una categoría de UIView que le permite agregar un borde de capa o borde con vista de respaldo en cualquier lado de UIView: UIView+Borders


Creé esta subclase UIView simple para que funcione en Interface Builder y funcione con restricciones: https://github.com/natrosoft/NAUIViewWithBorders

Aquí está la publicación de mi blog sobre esto: http://natrosoft.com/?p=55

- Básicamente solo ingrese una UIView en Interface Builder y cambie su tipo de clase a NAUIViewWithBorders.
- Entonces, en su viewCidLoad de su VC, haga algo como:

/* For a top border only ———————————————- */ self.myBorderView.borderColorTop = [UIColor redColor]; self.myBorderView..borderWidthsAll = 1.0f; /* For borders with different colors and widths ————————— */ self.myBorderView.borderWidths = UIEdgeInsetsMake(2.0, 4.0, 6.0, 8.0); self.myBorderView.borderColorTop = [UIColor blueColor]; self.myBorderView.borderColorRight = [UIColor redColor]; self.myBorderView.borderColorBottom = [UIColor greenColor]; self.myBorderView.borderColorLeft = [UIColor darkGrayColor];

Aquí hay un enlace directo al archivo .m para que pueda ver la implementación: NAUIViewWithBorders.m
También hay un proyecto de demostración.


La respuesta de GilbertOOI en Swift 2:

let topBorder: CALayer = CALayer() topBorder.frame = CGRectMake(0.0, 0.0, myView.frame.size.width, 3.0) topBorder.backgroundColor = UIColor.redColor().CGColor myView.layer.addSublayer(topBorder)


Solo estoy probando pocas líneas de código y funciona muy bien, solo pruébalo en tu proyecto. espero que obtenga su solución fácilmente.

¿Por qué crear una nueva Vista y agregarla a su vista existente ...? Para esta tarea, simplemente cree un CALayer y agréguelo a la Capa de UIView existente de la siguiente manera:

#import <QuartzCore/QuartzCore.h> - (void)viewDidLoad { CALayer *TopBorder = [CALayer layer]; TopBorder.frame = CGRectMake(0.0f, 0.0f, myview.frame.size.width, 3.0f); TopBorder.backgroundColor = [UIColor redColor].CGColor; [myview.layer addSublayer:TopBorder]; [super viewDidLoad]; }

y su salida es: -


he encontrado una solución para mí, aquí están los trucos:

CGSize mainViewSize = self.view.bounds.size; CGFloat borderWidth = 1; UIColor *borderColor = [UIColor colorWithRed:37.0/255 green:38.0/255 blue:39.0/255 alpha:1.0]; UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, mainViewSize.width, borderWidth)]; topView.opaque = YES; topView.backgroundColor = borderColor; topView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; [self.view addSubview:topView];


respuesta de remus en Obj-C:

CALayer *topBorder = [CALayer new]; topBorder.frame = CGRectMake(0.0, 0.0, self.frame.size.width, 3.0); topBorder.backgroundColor = [UIColor redColor].CGColor; [myView.layer addSublayer:topBorder];


La respuesta de GilbertOOI en Swift 4:

let topBorder: CALayer = CALayer() topBorder.frame = CGRect(x: 0, y: 0, width: myView.frame.size.width, height: 1) topBorder.backgroundColor = UIColor.purple.cgColor myView.layer.addSublayer(topBorder)