【问题标题】:Add just a top border to an UIView with Quartzcore/layer?使用 Quartzcore/layer 仅向 UIView 添加顶部边框?
【发布时间】:2013-07-10 15:30:01
【问题描述】:

是否可以在 UIView 顶部添加边框,如果可以,请问如何?

【问题讨论】:

标签: ios uiview layer


【解决方案1】:

我只是测试 Bellow 几行代码,它工作得非常好,只需在您的项目中测试它。希望您能轻松获得解决方案。

为什么要创建新视图并将其添加到现有视图中..?对于此任务,只需创建一个 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];

}

它的输出是:-

【讨论】:

  • 更精确,你的解决方案而不是我的解决方案管理糟糕的自转!
  • 一个 UIView 至少同样可以做到这一点
  • 不,你可以完全使用 UIView 来做到这一点。
  • 当视图改变其大小(例如动画)时,边框不会被调整大小。
【解决方案2】:

我已经为我找到了解决方案,这是技巧:

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

【讨论】:

  • 如果您需要担心旋转,这个非常棒。
【解决方案3】:

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)

【讨论】:

    【解决方案4】:

    这是一个 UIView 类别,可让您在 UIView 的任何一侧添加图层后置或视图支持的边框:UIView+Borders

    【讨论】:

      【解决方案5】:

      GilbertOOI's answer 在 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)
      

      【讨论】:

        【解决方案6】:

        我创建了这个简单的 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
        还有一个演示项目。

        【讨论】:

        • 感谢这个——我发现它非常可靠且易于使用,实现起来非常简单。
        • 更好的扩展,而不是子类化
        【解决方案7】:

        remus 在 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];
        

        【讨论】:

          【解决方案8】:

          Swift5:

          我们将编写一个单独的方法来为该视图添加边框。为了给这个视图添加边框,我们将创建两个具有所需厚度的图层。我们将这两层的框架设置为视图的顶部和底部。我们将在这些图层上设置所需的边框背景颜色,并将这些图层作为子图层添加到视图中。

          func addTopBorders() {
             let thickness: CGFloat = 1.0
             let topBorder = CALayer()
             topBorder.frame = CGRect(x: 0.0, y: 0.0, width: 
             self.down_view_outlet.frame.size.width, height: thickness)
             topBorder.backgroundColor = UIColor.white.cgColor
             down_view_outlet.layer.addSublayer(topBorder)
          }
          

          【讨论】:

            猜你喜欢
            • 2013-06-25
            • 2011-09-15
            • 1970-01-01
            • 1970-01-01
            • 2017-12-20
            • 2014-06-06
            • 1970-01-01
            • 1970-01-01
            • 2020-05-07
            相关资源
            最近更新 更多