Есть ли способ установить cornerRadius
только верхний левый и верхний правый угол UIView
?
Я попробовал следующее, но в итоге я больше не видел вид.
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;
view.bounds
, а неframe
(2) слой должен быть, аCAShapeLayer
неCALayer
; (3) установить слойpath
, а неshadowPath
.Ответы:
Обратите внимание на тот факт, что если у вас есть ограничения макета, вы должны обновить это следующим образом в своем подклассе UIView:
Если вы этого не сделаете, он не появится.
А для закругления углов используйте расширение:
Дополнительный случай контроллера представления : Если вы не можете или не хотите создавать подклассы представления, вы все равно можете округлить представление. Сделайте это из контроллера своего представления, переопределив
viewWillLayoutSubviews()
функцию следующим образом:источник
Я не уверен, почему ваше решение не сработало, но следующий код работает для меня. Создайте маску Безье и примените ее к своему виду. В моем коде ниже я округлял нижние углы
_backgroundView
с радиусом 3 пикселя.self
это обычайUITableViewCell
:Swift версия с некоторыми улучшениями:
Версия Swift 3.0:
Быстрое расширение здесь
источник
viewDidLoad
методом, переместил егоviewDidAppear
и он заработал.simulator
размера int раскадровки.ex: if the simulator size is 6s it works fine for 6s, but not of others.
как я могу преодолеть это.path.CGPath
должно бытьpath.cgPath
viewWillAppear
. Это тоже работает.Вот Swift- версия ответа @JohnnyRockex
Запись
Если вы используете автоматическую компоновку , вам нужно будет создать подкласс своего
UIView
и вызватьroundCorners
представленияlayoutSubviews
для оптимального эффекта.источник
.TopRight
и.BottomRight
, похоже, не работает для меня.view.roundCorners([.TopLeft , .BottomLeft], radius: 10)
.layoutIfNeeded()
этот метод.И , наконец , ... есть CACornerMask в iOS11! С
CACornerMask
этим можно сделать довольно легко:источник
Пример кода Swift здесь: https://stackoverflow.com/a/35621736/308315
Не напрямую. Тебе придется:
CAShapeLayer
path
наCGPathRef
основе,view.bounds
но только с двумя закругленными углами (возможно, используя+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
)view.layer.mask
чтобы бытьCAShapeLayer
источник
Вот краткий метод, реализованный следующим образом:
источник
В swift 4.1 и Xcode 9.4.1
В iOS 11 достаточно одной строки:
Смотрите полный код:
Но для более низких версий
Полный код есть.
Если вы используете AutoResizing в раскадровке, напишите этот код в viewDidLayoutSubviews () .
источник
iOS 11, Swift 4
И вы можете попробовать этот код:
И вы можете использовать это в ячейке табличного представления.
источник
Это был бы самый простой ответ:
источник
Попробуйте этот код,
источник
Эмма:
.TopRight
и.BottomRight
не работаем для вас, возможно, потому что вызовview.roundCorners
сделан до финальногоview bounds
расчета. Обратите внимание, чтоBezier Path
производные от границ представления во время его вызова. Например, если автоматическое расположение сузит вид, закругленные углы с правой стороны могут быть за пределами вида. Попробуйте позвонить тудаviewDidLayoutSubviews
, где граница представления является окончательной.источник
Swift 4 Swift 5 простой способ в 1 линию
Применение:
Функция:
В Objective-C
Применение:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];
Функция, используемая в категории (только один угол):
источник
Мое решение для округления определенных углов UIView и UITextFiels в swift заключается в использовании
а также
фактического UIView или UITextFields.
Пример:
И с помощью
а также
Я могу указать верхний правый и нижний правый угол UITextField для округления.
Вы можете увидеть результат здесь:
источник
Swift 4
источник
Способ сделать это программно - создать
UIView
верхнюю частьUIView
с закругленными углами. Или вы могли бы спрятать верхнюю часть под чем-то.источник
источник
Самый простой способ - сделать маску с закругленным угловым слоем.
И не забудьте:
источник
Все ответы, которые уже даны, являются действительно хорошими и действительными (особенно идея Юнуса об использовании
mask
собственности).Однако мне нужно было что-то немного более сложное, потому что мой слой часто менял размеры, что означало, что мне нужно каждый раз вызывать эту логику маскирования, и это немного раздражало.
Я использовал быстрые
extensions
и вычисленные свойства, чтобы создать реальноеcornerRadii
свойство, которое позаботится об автоматическом обновлении маски при разметке слоя.Это было достигнуто с помощью Peter Стейнберга больших аспектов библиотеки для swizzling.
Полный код здесь:
Я написал простой пост в блоге, объясняющий это.
источник
Если вы ищете решение только для конструктора интерфейсов, есть одно для iOS 11 и выше . Смотрите мой ответ здесь: https://stackoverflow.com/a/58626264
источник
Вот как вы можете установить радиус угла для каждого угла кнопки с Xamarin в C # :
источник
Прекрасное продолжение для повторного использования решения Yunus Nedim Mehel
Swift 2.3
Применение
источник
После изменения немного кода @apinho В Swift 4.3 работает нормально
Чтобы использовать эту функцию для просмотра
источник
Еще одна версия ответа Стефана .
источник
В Swift 4.2 создайте его
@IBDesignable
следующим образом:источник
Простое расширение
Применение:
источник