Vi en el inspector que puedo cambiar el color de fondo, pero también me gustaría cambiar el color del borde y el grosor, es esto posible?

Gracias

InformationsquelleAutor foreyez | 2010-07-25

13 Comentarios

  1. 587

    Que usted necesita para utilizar la vista de la capa para establecer la frontera de la propiedad. e.g:

    #import <QuartzCore/QuartzCore.h>
    ...
    view.layer.borderColor = [UIColor redColor].CGColor;
    view.layer.borderWidth = 3.0f;

    También es necesario vínculo con QuartzCore.framework para acceder a esta funcionalidad.

    • Es allí cualquier manera de establecer la anchura diferente/colores para cada lado?
    • Me temo que tendrá que hacer personalizada UIView con drawRect: método para que
    • Si hago esto, y en la parte superior de este punto de vista tengo una animación, como un modal UINavigationController despedir, veo un montón de problemas técnicos sucediendo, es difícil de describir. Si puedo desactivar las fronteras, todo vuelve a la normalidad.
    • configuración de la frontera de hecho puede ser un problema de rendimiento, en el caso de que usted puede utilizar su enfoque con vista personalizada
    • Sólo una advertencia para los demás. Xcode sugiere puente UIColor a CGColorRef como __bridge CGColorRef. Esto no funciona. Debe ser [UIColor blackColor].CGColor como se mencionó en la respuesta.
    • #import <QuartzCore/QuartzCore.h> ya no es necesario.

  2. 40

    Xcode 6 actualización

    Desde Xcode la última versión que hay una mejor solución a este:

    Con @IBInspectable usted puede definir los Atributos directamente desde dentro de la Attributes Inspector.

    Cocoa Touch: Cómo Cambiar el UIView de la Frontera del Color Y el Grosor?

    Esto establece la User Defined Runtime Attributes para usted:

    Cocoa Touch: Cómo Cambiar el UIView de la Frontera del Color Y el Grosor?

    Hay dos métodos para configurar esto:

    Opción 1 (con actualización en vivo en el Guión gráfico)

    1. Crear MyCustomView.
    2. Este hereda de UIView.
    3. Conjunto @IBDesignable (esto hace que la actualización de la Vista en vivo).*
    4. Conjunto de Atributos en tiempo de ejecución (de la frontera, etc.) con @IBInspectable
    5. Cambiar su punto de vista de la Clase a MyCustomView
    6. Editar en el Panel de Atributos y ver los cambios en el Guión 🙂

    `

    @IBDesignable
    class MyCustomView: UIView {
        @IBInspectable var cornerRadius: CGFloat = 0 {
            didSet {
                layer.cornerRadius = cornerRadius
                layer.masksToBounds = cornerRadius > 0
            }
        }
        @IBInspectable var borderWidth: CGFloat = 0 {
            didSet {
                layer.borderWidth = borderWidth
            }
        }
        @IBInspectable var borderColor: UIColor? {
            didSet {
                layer.borderColor = borderColor?.CGColor
            }
        }
    }

    * @IBDesignable sólo funciona cuando se establece en el inicio de class MyCustomView

    Opción 2 (no trabajando desde Swift 1.2, ver comentarios)

    Extender su UIView Clase:

    extension UIView {
        @IBInspectable var cornerRadius: CGFloat = 0 {
            didSet {
                layer.cornerRadius = cornerRadius
                layer.masksToBounds = cornerRadius > 0
            }
        }
        @IBInspectable var borderWidth: CGFloat = 0 {
            didSet {
                layer.borderWidth = borderWidth
            }
        }
        @IBInspectable var borderColor: UIColor? {
            didSet {
                layer.borderColor = borderColor?.CGColor
            }
        }
    }

    De esta manera, la Vista predeterminada siempre tiene los campos editables en Attributes Inspector. Otra ventaja es que usted no tiene que cambiar la clase a MycustomView cada vez.
    Sin embargo, una desventaja de esto es que usted sólo podrá ver los cambios cuando se ejecuta la aplicación.

    • Su extensión no funciona en la última versión de Xcode como la de hoy.
    • Voy a confirmar @EdgarAroutiounian sólo decir que en Swift 1.2 el segundo método ya no funciona
    • ¿Qué acerca de Objective-C?
    • Echa un vistazo spencery2 la respuesta más abajo, se tomó el tiempo para escribir en Objective-C:
    • actualización de la extensión para no almacenar un valor y uso conjunto(valor) { } y get { } para acceder a la capa directamente, funciona entonces.
  3. 16

    También puede crear frontera con el color de tu deseo..

    view.layer.borderColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0].CGColor;

    *r,g,b son los valores entre 0 y 255.

    • Vale la pena señalar que r, g y b probablemente debería ser de tipo float; los divisores también debe ser de tipo float: r / 255.0.
    • no, C sintaxis no es como Usted dice. r, g y b pueden ser de tipo int, como C (y objC ES C) promociones de fundición int r=128 a doble al hacer: r/255.0. Por la manera de conseguir el doble, y el Ruido se va a lanzar a CGFloat.
  4. 10

    Añadir lo siguiente @IBInspectables en UIView extensión

    extension UIView {
    
      @IBInspectable var borderWidth: CGFloat {
        get {
          return layer.borderWidth
        }
        set(newValue) {
          layer.borderWidth = newValue
        }
      }
    
      @IBInspectable var borderColor: UIColor? {
        get {
          if let color = layer.borderColor {
            return UIColor(CGColor: color)
          }
          return nil
        }
        set(newValue) {
          layer.borderColor = newValue?.CGColor
        }
      }
    }

    Y, a continuación, usted debe ser capaz de establecer borderColor y borderWidth atributos directamente de Atributo inspector. Ver imagen adjunta

    Atributos Del Inspector De

  5. 8

    Cuando yo uso el de Vladimir CALayer solución, y en la parte superior de la vista tengo una animación, como un modal UINavigationController despedir, veo un montón de problemas técnicos sucediendo y tener el dibujo de los problemas de rendimiento.

    Así, otra manera de lograr esto, pero sin los problemas técnicos y la pérdida de rendimiento, es para hacer una custom UIView y aplicar la drawRect mensaje así:

    - (void)drawRect:(CGRect)rect
    {
        CGContextRef contextRef = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(contextRef, 1);
        CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0);
        CGContextStrokeRect(contextRef, rect);    
    }
    • cómo podemos actualizar esta frontera de color en tiempo de ejecución?
    • Almacenar el color en una variable y cuando usted necesita para cambiar el color del borde, cambia el valor de la variable y de la llamada setNeedsDisplay en la vista. Esto hará que el redibujado de la UIView e implícitamente se re-llamada drawRect. No se ha probado, tho …
  6. 7
    view.layer.borderWidth = 1.0
    view.layer.borderColor = UIColor.lightGray.cgColor
    • En realidad no me gusta la gente de estar abajo votó sin una explicación. Ayuda a nadie.
  7. 6

    Prueba este código:

    view.layer.borderColor =  [UIColor redColor].CGColor;
    view.layer.borderWidth= 2.0;
    [view setClipsToBounds:YES];
  8. 4

    Yo no sugiero reemplazar el drawRect debido a que causan un impacto en el rendimiento.

    Lugar, me gustaría modificar las propiedades de la clase como la siguiente (en su encargo de uiview):

      - (id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
          self.layer.borderWidth = 2.f;
          self.layer.borderColor = [UIColor redColor].CGColor;
        }
      return self;

    No veo fallos cuando se toma por encima de enfoque – no sé por qué poner en la initWithFrame paradas de estos 😉

  9. 3

    Quería agregar esto a @marczking la respuesta (Opción 1) como un comentario, pero mi estatus en StackOverflow es evitar que.

    Hice un puerto de @marczking respuesta del Objetivo C. Funciona como un encanto, gracias @marczking!

    UIView+Frontera.h:

    #import <UIKit/UIKit.h>
    
    IB_DESIGNABLE
    @interface UIView (Border)
    
    -(void)setBorderColor:(UIColor *)color;
    -(void)setBorderWidth:(CGFloat)width;
    -(void)setCornerRadius:(CGFloat)radius;
    
    @end

    UIView+Frontera.m:

    #import "UIView+Border.h"
    
    @implementation UIView (Border)
    //Note: cannot use synthesize in a Category
    
    -(void)setBorderColor:(UIColor *)color
    {
        self.layer.borderColor = color.CGColor;
    }
    
    -(void)setBorderWidth:(CGFloat)width
    {
        self.layer.borderWidth = width;
    }
    
    -(void)setCornerRadius:(CGFloat)radius
    {
        self.layer.cornerRadius = radius;
        self.layer.masksToBounds = radius > 0;
    }
    
    @end
  10. 2

    @IBInspectable me está funcionando en iOS 9 , Swift 2.0

    extension UIView {
    
    @IBInspectable var borderWidth: CGFloat {
    get {
            return layer.borderWidth
        }
        set(newValue) {
            layer.borderWidth = newValue
        }
    }
    
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set(newValue) {
            layer.cornerRadius = newValue
        }
    }
    
    @IBInspectable var borderColor: UIColor? {
        get {
            if let color = layer.borderColor {
                return UIColor(CGColor: color)
            }
            return nil
        }
        set(newValue) {
            layer.borderColor = newValue?.CGColor
        }
    }
  11. 1

    Si usted no desea editar la capa de un UIView, siempre se puede incrustar la vista dentro de otro punto de vista. La vista principal tendría su color de fondo establecido para el color del borde. También sería un poco más grande, dependiendo de cómo todo el que desee de la frontera para ser.

    Por supuesto, esto sólo funciona si su vista no es transparente y que sólo se desea un color de borde. El OP quería la frontera en la propia vista, pero esta puede ser una alternativa viable.

    • Gracias por el azar de voto con ningún comentario.
  12. 0

    Si quieres añadir otra frontera en diferentes lados, se puede agregar una subvista con el estilo específico es una manera fácil para venir para arriba con.

  13. 0

    elemento del color de borde de swift 4.2:

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell_lastOrderId") as! Cell_lastOrder
    cell.layer.borderWidth = 1
    cell.layer.borderColor = UIColor.white.cgColor
    cell.layer.cornerRadius = 10

Dejar respuesta

Please enter your comment!
Please enter your name here