Добавление дополнений к UIView
Я ищу способ добавить свойство padding
в UIView. В идеале я хотел бы избежать подклассификации и поместить ее в категорию. Использование будет примерно таким:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
И, возможно, также имеет свойство paddingBox
, которое вернет CGRect
, описывающее размер и положение внутреннего поля заполнения.
Теперь, как бы реализовать в категории что-то подобное. Сначала я использовал bounds
, но, к сожалению, размер bounds
связан с размером frame
(всегда одинаковым), только координаты могут отличаться.
Ответы
Ответ 1
Обычно это делается путем установки границ в представлении. Так что если вы хотите вставить 10 раундов, вы можете сделать:
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
Границы определяют область видимости, относящуюся к изображению, относительно кадра. Таким образом, это должно привести к заполнению. Затем вы можете получить "paddingBox" только из границ.
Надеюсь, это поможет!:)
Ответ 2
Обновление для Swift 3
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
:)
Ответ 3
Начиная с iOS 8, каждое представление теперь имеет свойство layoutMargins
, которое соответствует заполнению.
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
Когда вы используете AutoLayout, формат с |-[subview]-|
, |-
будет ссылаться на ребра, определенные с помощью layoutMargins
.
Источник: https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc
Ответ 4
Что вам действительно нужно сделать, так это создать представление и добавить к нему подзаголовок. Сделайте один вид фона и придайте ему нужный кадр. Затем сделайте второй подзапрос рамкой, которую вы хотите, с помощью кромок.
UIView backgroundView = new UIView(CGRect.FromLTRB(0, 0, 100, 100))
{
BackgroundColor = backgroundGray,
};
//Will have a right edge inset of 10
UIView edgyView = new UIView(CGRect.FromLTRB(0, 0, 90, 100))
{
BackgroundColor = backgroundGray,
}
backgroundView.AddSubview(edgyView);
Ответ 5
Вы можете переопределить свойство alignmentRectInsets. Вот пример в Swift 4
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
Ответ 6
Обновление для Swift 4:
self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
Ответ 7
Вы можете вставить рамку/границы вида следующим образом:
yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)