2013-07-12 12 views
34

È possibile aggiungere un bordo solo sopra un UIView, in caso affermativo, come si prega?Aggiungi solo un bordo superiore a un UIView con Quartzcore/layer?

+0

è possibile impostare view.layer. bordercolor e borderwidth, bordercolor – rakeshNS

+0

No, scusa, la tua soluzione aggiunge un bordo per tutte le viste, non solo per la parte superiore di UIView !!! – GilbertOOl

+1

possiamo impostare confine su un lato del UIView, questo post potrebbe essere utile http://stackoverflow.com/questions/11236607/uiview-set-only-side-borders – rakeshNS

risposta

18

ho soluzione scoperta per me, ecco i trucchi:

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]; 
+2

Questo è fantastico se devi preoccuparti della rotazione. – werm098

95

Ho appena Testing Bellow qualche linea di codice e funziona molto bello, proprio testarlo al tuo progetto. spero che otterrai facilmente la tua soluzione.

Perché creare una nuova vista e aggiungerla alla vista esistente ...? Per questo compito è sufficiente creare un CALayer e aggiungerlo nella strato del UIView esistente fare come segue: -

#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]; 

} 

e il suo output è: -

enter image description here

+0

Sì, giusto, funziona anche bene! – GilbertOOl

+2

Ancora una precisione, la tua soluzione invece la mia soluzione gestisce una scarsa autorotazione! – GilbertOOl

+1

Un UIView lo farà almeno altrettanto bene – Pascalius

6

Ecco una categoria UIView che lascia aggiungi un bordo layer o back-view su qualsiasi lato di UIView: UIView+Borders

+0

non funziona con UIToolBar – chipbk10

2

Ho creato questa sottoclasse UIView semplice in modo che funzioni in Interface Builder e funzioni w esimo vincoli: https://github.com/natrosoft/NAUIViewWithBorders

Ecco il mio blog post su di esso: http://natrosoft.com/?p=55

- Fondamentalmente appena caduta in un UIView in Interface Builder e cambiare il suo tipo di classe a NAUIViewWithBorders.
- Poi, nel viewDidLoad del VC fare qualcosa di simile:

/* 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]; 

Ecco un link diretto al file .m modo da poter vedere l'attuazione: NAUIViewWithBorders.m
c'è un progetto demo pure.

+1

Grazie per questo - l'ho trovato davvero solido e semplice da usare, con un'implementazione piacevolmente semplice. – weienw

+2

meglio con l'estensione, non la sottoclasse –

8

risposta di GilbertOOI a Swift 2: risposta

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) 
1

Remus in 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]; 
1

GilbertOOI's answer a 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) 
Problemi correlati