Подтвердить что ты не робот

Добавление дополнений к UIView

Я ищу способ добавить свойство padding в UIView. В идеале я хотел бы избежать подклассификации и поместить ее в категорию. Использование будет примерно таким:

myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);

И, возможно, также имеет свойство paddingBox, которое вернет CGRect, описывающее размер и положение внутреннего поля заполнения.

Теперь, как бы реализовать в категории что-то подобное. Сначала я использовал bounds, но, к сожалению, размер bounds связан с размером frame (всегда одинаковым), только координаты могут отличаться.

4b9b3361

Ответ 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)