2013-07-12 11 views
34

Czy można dodać obramowanie tuż nad UIView, jeśli tak, to w jaki sposób?Dodać tylko górną granicę do UIView z Quartzcore/layer?

+0

można ustawić view.layer. bordercolor and borderwidth, bordercolor – rakeshNS

+0

Nie, przepraszam, twoje rozwiązanie dodać obramowanie dla wszystkich widoków, nie TYLKO górny uIView !!! – GilbertOOl

+1

możemy ustawić obramowanie z jednej strony UIView, ten post może być pomocny http://stackoverflow.com/questions/11236607/uiview-set-only-side-borders – rakeshNS

Odpowiedz

18

Mam rozwiązanie znajdź dla mnie, oto sztuczki:

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

Ten jest świetny, jeśli musisz się martwić o rotację. – werm098

95

Właśnie Testowanie Poniżej kilka linii kodu i działa bardzo ładnie, tylko przetestować go do swojego projektu. mam nadzieję, że łatwo dostaniesz swoje rozwiązanie.

Po co tworzyć nowe widoki i dodawać je do istniejącego widoku ..? Do tego zadania wystarczy utworzyć jeden CALayer i dodać go do warstwy Twoich istniejących UIView jest zrobić w następujący sposób: -

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

} 

i to wyjście jest: -

enter image description here

+0

Tak, dobrze, działa też dobrze! – GilbertOOl

+2

Jeszcze jedna precyzja, twoje rozwiązanie zamiast rozwiązania dla kopalni radzi sobie z autorotacją! – GilbertOOl

+1

UIView zrobi to przynajmniej równie dobrze – Pascalius

6

Oto kategoria UIView, który pozwala po każdej stronie UIView dodajesz warstwę back-back lub widokową: UIView+Borders

+0

nie działa z UIToolBarem – chipbk10

2

Utworzono tę prostą podklasę UIView, aby działała w Konstruktorze interfejsu i działa w ITH ograniczenia: https://github.com/natrosoft/NAUIViewWithBorders

Oto mój post na blogu o tym: http://natrosoft.com/?p=55

- Zasadniczo tylko kropla w UIView interfejs Builder i zmienić jej typ klasy do NAUIViewWithBorders.
- Następnie w VC viewDidLoad zrobić coś takiego:

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

Oto bezpośredni link do pliku .m więc można zobaczyć realizacji: NAUIViewWithBorders.m
Jest projekt demo, jak również.

+1

Dzięki za to - uznałem, że jest naprawdę solidny i prosty w obsłudze, z przyjemnie prostą implementacją. – weienw

+2

lepiej z rozszerzeniem, bez podklasy –

8

odpowiedź GilbertOOI w Swift 2: odpowiedź

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

Remusa w 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 w 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) 
Powiązane problemy