Mi pregunta es, ya se ha especificado en el título: me gustaría deshacerse de la línea negra dibujada en la parte inferior de la UISearchBar. Alguna idea?

Aquí una imagen de lo que quiero decir:

Personalizar UISearchBar: Tratando de deshacerse de la 1px línea negra debajo de la barra de búsqueda

ACTUALIZACIÓN:

Creo que la línea es parte de la UITableView‘s tableHeaderView. Todavía no sé cómo quitarlo.

InformationsquelleAutor strave | 2011-10-01

11 Comentarios

  1. 19

    He arreglado esto mediante la adición de un subview a la searchBar‘s pila de vista así:

    CGRect rect = self.searchBar.frame;
    UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(0, rect.size.height-2,rect.size.width, 2)];
    lineView.backgroundColor = [UIColor whiteColor];
    [self.searchBar addSubview:lineView];

    Aquí, self.searchBar es un UISearchBar puntero de mi clase de controlador.

    • He añadido la línea en el layoutSubviews método de un UISearchBar de la subclase. Yo estaba trabajando con una subclase de todos modos.
  2. 72

    Probar este

     searchBar.layer.borderWidth = 1;
    
     searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
    • A mi me funciona, en mi caso estoy usando una costumbre de la barra de colores de tinte, así que mi código es el siguiente (swift): searchBar.layer.borderColor = searchBar.barTintColor?.CGColor
    • Lo que me ayudó a ver por qué funciona fue erróneamente conjunto de «barra de búsquedas.la capa.borderColor = barra de búsquedas.tintColor?.CGColor»
    • ¿Alguien puede explicar por qué funciona esto?
    • Así que uno dice para agregar searchBar.layer.borderColor = searchBar.barTintColor?.CGColor y uno para quitar eso -_-
    • Tnanks, hombre! Has salvado mi día )
  3. 44

    Por qué:

    Así que, he cavado en la API tratando de averiguar por qué está sucediendo esto. Al parecer, quien escribió el UISearchBar API es rasterizar las líneas en una imagen y configurarla como es backgroundImage.

    Solución:

    Propongo una solución más simple, si desea establecer la backgroundColor y deshacerse de las estrías:

    searchBar.backgroundColor = <#... some color #>
    searchBar.backgroundImage = [UIImage new];

    O si simplemente necesita una imagen de fondo sin las rayitas:

    searchBar.backgroundImage = <#... some image #>
    • Para iOS7+ usted querrá usar el setBackgroundImage:forBarPosition:barMetrics: método en su lugar.
    • Esta solución elimina la barra. Gracias @Oxcug!
  4. 26

    He 0.5px negro líneas horizontales tanto en la parte superior y en la parte inferior de mi UISearchBar. La única manera que he tenido hasta el momento de deshacerse de ellos es mediante la configuración de su estilo de Minimal:

    mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
    • Esto hace que textfield de color gris dentro de serachbar
  5. 5

    Swift 4.2:

    controller.searchBar.layer.borderWidth = 1
    controller.searchBar.layer.borderColor = UIColor(red: 255/255, green: 253/255, blue: 247/255, alpha: 1.0).cgColor

    Respuesta basada en la Ayush la respuesta.

  6. 3

    Conjunto de la tableHeaderView a nil antes de poner su UISearchBar allí.

    Si eso no ayuda, trate de ocultarlo. En primer lugar añadir a tu barra de búsqueda de una genérica y de tamaño apropiado UIView (por ejemplo, «contenedor») como una subvista, entonces

    CGRect frame = wrapper.frame;
    CGRect lineFrame = CGRectMake(0,frame.size.height-1,frame.size.width, 1);
    UIView *line = [[UIView alloc] initWithFrame:lineFrame];
    line.backgroundColor = [UIColor whiteColor]; //or whatever your background is
    [wrapper addSubView:line];
    [line release];

    Y, a continuación, añadir a la tableHeaderView.

    self.tableView.tableHeaderView = wrapper;
    [wrapper release];
    • Gracias por sus soluciones. Desgraciadamente, ambas soluciones no cubren la línea. Tal vez es una sombra en la parte superior de la vista de tabla? Extraño!
    • «Establecer el tableHeaderView a nil antes de poner su UISearchBar allí…» ¿por Qué funciona esto?
  7. 3

    Esta pregunta ya ha sido resuelto, pero tal vez mi solución puede ayudar a alguien. He tenido un problema similar, excepto que yo estaba tratando de quitar la 1px borde superior.

    Si subclase UISearchBar puede invalidar el marco como este.

    - (void)setFrame:(CGRect)frame {
        frame.origin.y = -1.0f;
        [super setFrame:frame];
    
        self.clipsToBounds = YES;
        self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, 1.0f);
    }

    O si se quiere fijar el píxel inferior se podría hacer algo como esto, (no probado).

    - (void)setFrame:(CGRect)frame {
        frame.origin.y = 1.0f;
        [super setFrame:frame];
    
        self.clipsToBounds = YES;
        self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, -1.0f);
    }

    Sólo por la simplicidad del ejemplo son los clipsToBounds y searchFieldBackgroundPositionAdjustment en el setFrame.

    También la searchFieldBackgroundPositionAdjustment sólo es necesario para volver a centrar el campo de búsqueda.

    ACTUALIZACIÓN

    Resulta que el tableView de turno 1px de la actualización de la origin.y mientras que la barra de búsquedas está activo. Se siente un poco extraño. Me di cuenta de que la solución es tan simple como la creación, self.clipsToBounds = YES;

  8. 1

    De advertencia. Este es un hack. Quisiera saber de una mejor manera más oficial.

    Puede utilizar el pony depurador de averiguar donde en la subvista de la jerarquía es. Creo que lo que se ve es un privado UIImageView llamado «separator»

    - (void)viewWillAppear:(BOOL)animated
    {
      [super viewWillAppear:animated];
      for (UIView* view in self.searchBar.subviews)  {
        if (view.frame.size.height == 1 && [view isKindOfClass:[UIImageView class]]) {
          view.alpha = 0;
          break;
        }
      } 
    }
  9. 0

    lo trabajado conmigo es, la configuración de la barra de búsquedas barTintColor como la barra de navegación de color

        searchBar.barTintColor = UIColor.colorWithHexString(hexStr: "479F46")

    después de las pruebas, se resuelve el problema de iOS 10.x y 11.x

    GIF :

    Personalizar UISearchBar: Tratando de deshacerse de la 1px línea negra debajo de la barra de búsqueda

  10. -1

    Puede utilizar

      [[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"someImage.png"]forState:UIControlStateNormal];

    en iOS 5+ para deshacerse de la línea.

    • Esto oculta la búsqueda campo de entrada de texto en lugar de la barra de la parte inferior de la línea.

Dejar respuesta

Please enter your comment!
Please enter your name here