Настройка UISearchBar: попытка избавиться от черной линии 1px под панелью поиска
Мой вопрос уже указан в заголовке: я хотел бы избавиться от черной линии, нарисованной в нижней части UISearchBar
. Любые идеи?
Вот изображение того, что я имею в виду:
![search bar with black bottom line]()
UPDATE
Я думаю, что строка является частью UITableView
tableHeaderView
. Я до сих пор не знаю, как его удалить.
Ответы
Ответ 1
Я исправил это, добавив subview
в стек представления searchBar
так:
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];
Здесь self.searchBar
является указателем UISearchBar
моего класса контроллера.
Ответ 2
Попробуйте это
searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
Ответ 3
Почему:
Итак, я ворвался в API, пытаясь понять, почему это происходит. По-видимому, кто написал API UISearchBar
, он растеризует строки на изображение и устанавливает его как backgroundImage
.
Решение:
Я предлагаю более простое решение, если вы хотите установить backgroundColor
и избавиться от линий волос:
searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];
Или, если вам просто нужно фоновое изображение без линий волос:
searchBar.backgroundImage = <#... some image #>
Ответ 4
У меня 0.5px
черные горизонтальные линии сверху и снизу UISearchBar
. Единственный способ избавиться от них - установить его стиль Minimal
:
mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
Ответ 5
Решение для
XCode 10.1 Swift 4.2
![enter image description here]()
Ответ 6
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
Ответ основан на ответе Аюша.
Ответ 7
Установите tableHeaderView на nil
перед тем, как поставить UISearchBar
там.
Если это не поможет, попробуйте прикрыть его. Сначала добавьте строку поиска в общий и соответствующий размер UIView
(скажем, "обертку" ) в качестве поднабора, затем
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];
Затем добавьте его в таблицуHeaderView.
self.tableView.tableHeaderView = wrapper;
[wrapper release];
Ответ 8
Этот вопрос уже решен, но, может быть, мое решение может помочь кому-то другому. У меня была аналогичная проблема, за исключением того, что я пытался удалить верхнюю границу 1px.
Если вы подклассом UISearchBar
, вы можете переопределить фрейм, как это.
- (void)setFrame:(CGRect)frame {
frame.origin.y = -1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, 1.0f);
}
Или, если вы хотите исправить нижний пиксель, вы можете сделать что-то вроде этого (untested).
- (void)setFrame:(CGRect)frame {
frame.origin.y = 1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, -1.0f);
}
Только для простоты примера находятся clipsToBounds
и searchFieldBackgroundPositionAdjustment
в setFrame
.
Кроме того, searchFieldBackgroundPositionAdjustment
требуется только для повторного центрирования поля поиска.
UPDATE
Оказывается, что tableView
сдвинет 1px от обновления origin.y
, пока активен поискBar. Это немного странно. Я понял, что решение так же просто, как установка, self.clipsToBounds = YES;
Ответ 9
Предупреждение. Это взломать. Хотелось бы знать лучший, более официальный способ.
Вы можете использовать отладчик пони, чтобы выяснить, где находится иерархия subview. Я думаю, что вещь, которую вы видите, - это частный UIImageView, называемый "разделителем"
- (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;
}
}
}
Ответ 10
то, что работало со мной, это установка панели barTintColor
в качестве цвета панели навигации
searchBar.barTintColor = UIColor.colorWithHexString(hexStr: "479F46")
после тестирования это решает проблему в iOS 10.x и 11.x
GIF:
![enter image description here]()
Ответ 11
Вы можете использовать
[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"someImage.png"]forState:UIControlStateNormal];
на iOS 5+, чтобы избавиться от строки.