1. ホーム
  2. ios

[解決済み] UIViewのbottom border?

2022-04-27 07:49:01

質問

に対して UIScrollView *toScrollView (画面の幅)の下にグレーのボーダーを追加したい(iPhoneのネイティブメッセージアプリのメール作成ビューのto-fieldと全く同じ)。

これを実現するために、私は Cocoa Touch: How To Change UIView's Border Color and Thickness? で上部のボーダーを覆い、その上にカスタム UINavigationBar を作成し toScrollView のx座標が-1& width 322となり、左と右の境界線が画面の外に出るようになりました。

しかし、これはハックのようなもので、もっと良い方法はないものかと考えていました。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Add UINavigationBar *navigationBar at top.
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
                                             initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                             target:self action:@selector(cancelAction)];
    UINavigationBar *navigationBar = [[UINavigationBar alloc]
                                      initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)];
    navigationBar.items = [NSArray arrayWithObject:self.navigationItem];

    // Add UIScrollView *toScrollView below navigationBar.
    UIScrollView *toScrollView = [[UIScrollView alloc]
                                  initWithFrame:CGRectMake(-1.0f, 43.0f, 322.0f, 45.0f)];
    toScrollView.backgroundColor = [UIColor whiteColor];
    toScrollView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor;
    toScrollView.layer.borderWidth = 1.0f;
    [self.view addSubview:toScrollView];
    [self.view addSubview:navigationBar]; // covers top of toScrollView
}

解決方法は?

を使用する代わりに UIView を使用すると、@ImreKelényi が提案するように CALayer :

// Add a bottomBorder.
CALayer *bottomBorder = [CALayer layer];

bottomBorder.frame = CGRectMake(0.0f, 43.0f, toScrollView.frame.size.width, 1.0f);

bottomBorder.backgroundColor = [UIColor colorWithWhite:0.8f 
                                                 alpha:1.0f].CGColor;

[toScrollView.layer addSublayer:bottomBorder];