Я видел в инспекторе, что я могу изменить цвет фона, но я хотел бы также изменить цвет и толщину границы, возможно ли это?
275
Я видел в инспекторе, что я могу изменить цвет фона, но я хотел бы также изменить цвет и толщину границы, возможно ли это?
Ответы:
Вам нужно использовать слой вида, чтобы установить свойство границы. например:
Вам также нужно связаться с QuartzCore.framework для доступа к этой функции.
источник
__bridge CGColorRef
. Это не работает. Это должно быть[UIColor blackColor].CGColor
как указано в ответе.#import <QuartzCore/QuartzCore.h>
больше не нужен.Xcode 6 обновление
Начиная с последней версии XCode, есть лучшее решение для этого:
С
@IBInspectable
вы можете установить атрибуты непосредственно из внутриAttributes Inspector
.Это устанавливает
User Defined Runtime Attributes
для вас:Есть два подхода к настройке:
Вариант 1 (с живым обновлением в раскадровке)
MyCustomView
.UIView
.@IBDesignable
(это делает обновление View активным). *@IBInspectable
MyCustomView
`
*
@IBDesignable
работает только при установке в началеclass MyCustomView
Вариант 2 (не работает с Swift 1.2, см. Комментарии)
Расширьте свой класс UIView:
Таким образом, ваш вид по умолчанию всегда содержит эти дополнительные редактируемые поля
Attributes Inspector
. Еще одним преимуществом является то, что вам не нужно менять классMycustomView
каждый раз. Однако одним из недостатков этого является то, что вы увидите свои изменения только при запуске приложения.источник
Вы также можете создать рамку с цветом вашего желания.
* r, g, b - значения от 0 до 255.
источник
r
,g
и ,b
вероятно , следует поплавки; делители тоже должны быть поплавкамиr / 255.0
.Добавьте следующие @IBInspectables в расширение UIView
И тогда вы сможете установить атрибуты borderColor и borderWidth непосредственно из инспектора атрибутов. Смотрите прикрепленное изображение
Атрибут Инспектор
источник
Когда я использую решение CALayer Владимира, и в верхней части представления у меня есть анимация, например, модальное отключение UINavigationController, я вижу, что происходит много глюков и возникают проблемы с производительностью при рисовании.
Итак, еще один способ добиться этого, но без сбоев и потери производительности, - создать пользовательский UIView и реализовать
drawRect
сообщение следующим образом:источник
setNeedsDisplay
представление. Это заставит перерисовать UIView и неявно перезвонитdrawRect
. Не проверено, tho ...источник
Попробуйте этот код:
источник
Я бы не советовал переопределять drawRect из-за снижения производительности.
Вместо этого я бы изменил свойства класса, как показано ниже (в вашем пользовательском интерфейсе):
Я не видел никаких глюков при использовании вышеупомянутого подхода - не уверен, почему включение initWithFrame останавливает это ;-)
источник
Я хотел добавить это к ответу @ marczking ( вариант 1 ) в качестве комментария, но мой скромный статус в StackOverflow препятствует этому.
Я сделал ответ @ marczking на Objective C. Работает как шарм, спасибо @marczking!
UIView + Border.h:
UIView + Border.m:
источник
@IBInspectable работает для меня на iOS 9, Swift 2.0
источник
Если вы не хотите редактировать слой UIView, вы всегда можете встроить представление в другое представление. В родительском представлении цвет фона будет установлен на цвет границы. Это также будет немного больше, в зависимости от ширины границы.
Конечно, это работает только в том случае, если ваш вид не прозрачен и вам нужен только один цвет рамки. ФП хотел иметь границу в самом представлении, но это может быть жизнеспособной альтернативой.
источник
Если вы хотите добавить разные границы на разных сторонах, возможно, добавьте подпредставление с определенным стилем, способ легко придумать.
источник
Цвет границы элемента в Swift 4.2:
источник