Ответ 1
Если вы установили youBar.clipsToBounds = YES, линия волос исчезнет.
Надеюсь на эту помощь.
[EDIT]
Для нижней линии навигации navigationBar решение здесь fooobar.com/questions/181832/... также отлично работает.
В iOS 7 Apple изменила UIToolbar
, чтобы отобразить линию роста 1px. В некоторых случаях это визуально отвлекает, и, похоже, для его удаления нет никакого общедоступного API.
Настройка shadowImage не работает.
Я ищу способ удаления линии волос относительно чистым способом и сохраняю обычное размытие фона.
Если вы установили youBar.clipsToBounds = YES, линия волос исчезнет.
Надеюсь на эту помощь.
[EDIT]
Для нижней линии навигации navigationBar решение здесь fooobar.com/questions/181832/... также отлично работает.
Граница линии волос - это подъярус UIImageView на панели инструментов, вы можете скрыть его следующим образом:
for (UIView *subView in [self.toolbar subviews]) {
if ([subView isKindOfClass:[UIImageView class]]) {
// Hide the hairline border
subView.hidden = YES;
}
}
В строке это shadowImage. Его можно просто удалить, применив пустой UIImage. В соответствии с документацией вы также должны установить пользовательское фоновое изображение:
- (void)viewDidLoad {
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
}
Знайте: прозрачность не будет работать, если вы установите собственные изображения в случае, если вам это нужно.
При использовании раскадровки
self.clipsToBounds = true
можно настроить для панели инструментов в атрибутах Runtime. Это скроет линию волос. Проверено в iOS 7 и 8.
Его можно легко разрешить на раскадровке:
Выберите "Просмотр", который добавлен как контейнер UIBarButtonItem, и установите его "Подвижные клипы" и "Запустить приложение".
это решение сработало для меня... попробовал это для iOS 7
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
Не то, что вы хотите, но, безусловно, этот ответ поможет кому-то.
Если вы хотите изменить нижний (теневой) цвет UINavigationBar или UIToolbar, а не скрывать его, вы должны установить фоновое изображение и теневое изображение на панель.
Для изменения нижней границы (тени) UINavigationBar
[self.navigationController.navigationBar setBackgroundImage: [UIImage imageNamed: @ "yourImageName" ] forBarMetrics: UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage: [UIImage imageNamed: @ "yourImageName" ]];
Для изменения нижней границы (тени) UIToolbar
[yourToolBar setBackgroundImage: [UIImage imageNamed: @ "yourImageName" ] forToolbarPosition: UIBarPositionBottom barMetrics: UIBarMetricsDefault];
[yourToolBar setShadowImage: [UIImage imageNamed: @ "yourImageName" ] forToolbarPosition: UIBarPositionBottom];
В то время как несколько хакерских, подклассифицируя UITabBar
и переопределяя метод - (void)addSubview:
, мы можем исключить добавление разделителя линий в иерархию представлений:
- (void)addSubview:(UIView *)view {
if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height < 2.0f) {
return;
}
[super addSubview:view];
}
Таким образом мы получим как размытую панель вкладок, так и удалим разделитель линий. Он также гарантирует, что UITabBar
не будет обрезать представления до границ, что важно для таких эффектов, как большие центральные кнопки или другие компоненты пользовательского интерфейса.
Я не мог заставить это работать с помощью раскадровки в моем случае. В конце концов я использовал прокси-сервер внешнего вида для устранения тени на всех своих инструментах:
[[UIToolbar appearance] setClipsToBounds:YES];
Если вам нужно спрятать волосы и показать теневые клипы, то это не поможет
использование:
TOOLBAR.subviews
.filter { $0 is UIImageView }
.forEach { $0.hidden = true }
или
for case let imageView is UIImageView in TOOLBAR.subviews {
imageView.hidden = true
}