web-dev-qa-db-ja.com

Quartzcore / layerを使用してUIViewに上の境界線のみを追加しますか?

UIViewのすぐ上に境界線を追加することは可能ですか?

35
GilbertOOl

私は私のための解決策を見つけました、ここにトリックがあります:

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];
18
GilbertOOl

ほんの数行のコードをテストするだけで、非常にうまく機能します。プロジェクトでテストしてください。ソリューションが簡単に手に入ることを願っています。

新しいビューを作成して既存のビューに追加する理由このタスクでは、1つCALayerを作成して、既存のUIViewのレイヤーに追加します。以下のようにします:-

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

}

そして、その出力は次のとおりです-

enter image description here

97
Nitin Gohel

GilbertOOIの答え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)
8
brandonscript

UIViewの任意の側にレイヤーバックまたはビューバックの境界線を追加できるUIViewカテゴリーは次のとおりです。 IView + Borders

6
aroooo

この単純なUIViewサブクラスを作成して、Interface Builderで機能し、制約で機能するようにしました: https://github.com/natrosoft/NAUIViewWithBorders

これについての私のブログ投稿は次のとおりです。 http://natrosoft.com/?p=55

-基本的には、Interface BuilderでUIViewをドロップし、そのクラスタイプをNAUIViewWithBordersに変更します。
-次に、VCのviewDidLoadで次のようにします。

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

実装を確認できるように、.mファイルへの直接リンクを次に示します。 NAUIViewWithBorders.m
デモプロジェクトもあります。

2
n8tr

GilbertOOIの答え in 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)
2
dengApro

obj-Cでのremusの答え:

 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];
2
Andrew Bennett