Правило оператора XOR =>
0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1
Двоичное представление 4, 5 и 6:
4 = 1 0 0
5 = 1 0 1
6 = 1 1 0
теперь выполняет операцию XOR на 5 и 4:
5 ^ 4 => 1 0 1 (5)
1 0 0 (4)
----------
0 0 1 => 1
Аналогично,
5 ^ 5 => 1 0 1 (5)
1 0 1 (5)
------------
0 0 0 => (0)
5 ^ 6 => 1 0 1 (5)
1 1 0 (6)
-----------
0 1 1 => 3
Если вы установите youBar.clipsToBounds = YES, линия волос исчезнет.
Надеюсь, что это поможет.
[РЕДАКТИРОВАТЬ]
Для нижней линии навигации навигационного бара решение здесь https://stackoverflow.com/a/18180330/2011578 также отлично работает.
это решение сработало для меня ... попробовал это для iOS 7
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
Это может быть легко решено на раскадровке:
Выберите представление, которое добавляется как UIBarButtonItem Container & amp; установить его "Clip Subviews" & amp; Запустите приложение.
Граница волосяного покрова - это подвид 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];
}
. Имейте в виду: прозрачность не будет работать, если вы установите собственные изображения, если вам это нужно.
Несмотря на то, что он несколько хакерский, создающий подклассы UITabBar
и переопределяющий метод - (void)addSubview:
, мы можем предотвратить добавление разделителя линий роста в иерархию представлений:
- (void)addSubview:(UIView *)view {
if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height < 2.0f) {
return;
}
[super addSubview:view];
}
Таким образом, мы получим оба размытую панель вкладок и удалите разделитель волосяного покрова. Это также гарантирует, что UITabBar
не будет обрезать изображения до границ, что важно для таких эффектов, как большие центральные кнопки или другие компоненты пользовательского интерфейса.
При использовании раскадровок
self.clipsToBounds = true
можно настроить для панели инструментов в атрибутах времени выполнения. Это скроет линию волос. Проверено в iOS 7 и 8.
Не совсем то, что вы хотите, но этот ответ наверняка кому-то поможет.
Если вы хотите изменить цвет нижней границы (тени) 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 imageBoTB] для_узла_позиции]: Местоположение: имя_узла: @ "МестоПоложение:" 118]
Если вам нужно скрыть линию волос и показать теневые клипы, ограничения не помогают
используйте:
TOOLBAR.subviews
.filter { [110] is UIImageView }
.forEach { [110].hidden = true }
или:
for case let imageView is UIImageView in TOOLBAR.subviews {
imageView.hidden = true
}
Я не мог заставить это работать через раскадровку в моем случае. В конце концов я использовал прокси внешнего вида для устранения тени на всех моих панелях инструментов:
[[UIToolbar appearance] setClipsToBounds:YES];