Чи можна керувати властивостями меж UIView (кольором, товщиною тощо) безпосередньо від побудовника інтерфейсу або я можу це робити лише програмно?
Чи можна керувати властивостями меж UIView (кольором, товщиною тощо) безпосередньо від побудовника інтерфейсу або я можу це робити лише програмно?
Відповіді:
Насправді ви можете встановити деякі властивості шару подання через конструктор інтерфейсів. Я знаю, що через xcode я можу встановити рамку шару borderWidth та cornerRadius. borderColor не працює, ймовірно, тому, що шар хоче CGColor замість UIColor.
Можливо, вам доведеться використовувати рядки замість чисел, але це працює!
layer.cornerRadius
layer.borderWidth
layer.borderColor
Оновлення: layer.masksToBounds = true
Відповідь Rich86Man правильна, але ви можете використовувати категорії для властивостей проксі-сервера, таких як layer.borderColor. (Від ConventionalC CocoaPod)
CALayer + XibConfiguration.h:
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface CALayer(XibConfiguration)
// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;
@end
CALayer + XibConfiguration.m:
#import "CALayer+XibConfiguration.h"
@implementation CALayer(XibConfiguration)
-(void)setBorderUIColor:(UIColor*)color
{
self.borderColor = color.CGColor;
}
-(UIColor*)borderUIColor
{
return [UIColor colorWithCGColor:self.borderColor];
}
@end
layer.borderUIColor
Результат буде очевидним під час виконання, а не в Xcode.
Редагувати : Вам також потрібно встановити layer.borderWidth
принаймні 1, щоб побачити межу з обраним кольором.
У Swift 2.0:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.CGColor
}
get {
return UIColor(CGColor: self.borderColor!)
}
}
}
У Swift 3.0:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
}
Аналогічна відповідь на одну з iHulk, але у Swift
Додайте файл під назвою UIView.swift у свій проект (або просто вставте його у будь-який файл):
import UIKit
@IBDesignable extension UIView {
@IBInspectable var borderColor: UIColor? {
set {
layer.borderColor = newValue?.cgColor
}
get {
guard let color = layer.borderColor else {
return nil
}
return UIColor(cgColor: color)
}
}
@IBInspectable var borderWidth: CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat {
set {
layer.cornerRadius = newValue
clipsToBounds = newValue > 0
}
get {
return layer.cornerRadius
}
}
}
Тоді це стане доступним у програмі інтерфейсу для кожної кнопки, imageView, мітки тощо на панелі утиліт> Інспектор атрибутів:
Примітка: межа буде відображатися лише під час виконання.
@IBDesignable
з початку розширення.
Ви можете створити категорію UIView і додати це у .h файл категорії
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
Тепер додайте це у .m файл
@dynamic borderColor,borderWidth,cornerRadius;
і це також в. м файл
-(void)setBorderColor:(UIColor *)borderColor{
[self.layer setBorderColor:borderColor.CGColor];
}
-(void)setBorderWidth:(CGFloat)borderWidth{
[self.layer setBorderWidth:borderWidth];
}
-(void)setCornerRadius:(CGFloat)cornerRadius{
[self.layer setCornerRadius:cornerRadius];
}
тепер ви побачите це у вашій дошці для всіх підкласів UIView (UILabel, UITextField, UIImageView тощо)
Ось це .. Не потрібно імпортувати категорію нікуди, просто додайте файли категорії в проект і перегляньте ці властивості на дошці.
Для Swift 3 і 4 , якщо ви готові використовувати IBInspectable
s, є ось що:
@IBDesignable extension UIView {
@IBInspectable var borderColor:UIColor? {
set {
layer.borderColor = newValue!.cgColor
}
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
}
else {
return nil
}
}
}
@IBInspectable var borderWidth:CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius:CGFloat {
set {
layer.cornerRadius = newValue
clipsToBounds = newValue > 0
}
get {
return layer.cornerRadius
}
}
}
хоча це може встановити властивості, воно фактично не відображається в ІБ. Отже, якщо ви по суті пишете код у IB, ви можете також зробити це у своєму вихідному коді
Якщо ви хочете заощадити час, просто використовуйте два UIViews
зверху, один ззаду - колір облямівки, а той, що знаходиться спереду, менший, що надає ефект межі. Я також не вважаю, що це елегантне рішення, але якщо Apple піклується трохи більше, то не варто цього робити.
Це абсолютно можливо лише тоді, коли ви встановлюєте layer.masksToBounds = true
та відпочиваєте.
Робоча дошка не працює для мене весь час, навіть після того, як тут спробували все рішення
Тому завжди ідеальною відповіддю є використання коду. Просто створіть екземпляр IBOutlet UIView та додайте властивості
Коротка відповідь :
layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor
Довга відповідь:
customUIView.layer.cornerRadius = 10
pcustomUIView.layer.borderWidth = 2
customUIView.layer.borderColor = UIColor.blue.cgColor
Будь ласка, додайте ці 2 прості рядки коду:
self.YourViewName.layer.cornerRadius = 15
self.YourViewName.layer.masksToBounds = true
Це буде добре працювати.