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

Можно ли настроить CGRect с помощью UIEdgeInsets?

У меня есть CGRect, и я бы хотел настроить его с помощью UIEdgeInsets.

Кажется, возможно, может быть встроенная функция, которая делает это. Я искал CGRectAdjustByInsets или функции с некоторым другим префиксом CGRect…, но ничего не нашел.

Должен ли я закодировать свой собственный?

4b9b3361

Ответ 1

TL; DR

Используйте функцию UIEdgeInsetsInsetRect(theRect, theInsets).

Пример

// CGRectMake takes: left, bottom, width, height.
const CGRect originalRect = CGRectMake(0, 0, 100, 50);

// UIEdgeInsetsMake takes: top, left, bottom, right.
const UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, -20, -20);

// Apply the insets…
const CGRect adjustedRect = UIEdgeInsetsInsetRect(originalRect, insets);

// What the result?
NSLog(@"%@ inset by %@ is %@", 
      NSStringFromCGRect(originalRect),
      NSStringFromUIEdgeInsets(insets),
      NSStringFromCGRect(adjustedRect));

// Logs out…
// {{0, 0}, {100, 50}} inset by {10, 10, -20, -20} is {{10, 10}, {110, 60}}

Объяснение

  • Положительная вставка перемещает край прямоугольника внутрь (к середине прямоугольника).
  • Отрицательная вставка перемещает край наружу (от середины прямоугольника).
  • Вставка нуля будет оставлять только край.

Скажите мне больше

Другие полезные функции для работы на CGRect покрываются этой заметкой.

Ответ 2

Swift3

Скажите, что вы хотите границы, но меньше двух пикселей внизу:

    let ei = UIEdgeInsetsMake(0, 0, 2, 0)   // TLBR
    let smaller = UIEdgeInsetsInsetRect(bounds, ei)

Что это.

Если вы предпочитаете писать его как одну строку, просто

Сделайте два снизу:

let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0))

Приветствия