UIEdgeInsetsInsetRect 'был заменен методом экземпляра' CGRect.inset(by :)

Я сделал ошибку, обновив свой проект до Swift 4.2, не дожидаясь обновления стручков. Я медленно обновляю весь свой код, но есть одна строка, которую я не могу понять.

var animationRect = UIEdgeInsetsInsetRect(frame, UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding))

Ошибка, которую я получаю,

UIEdgeInsetsInsetRect 'был заменен методом экземпляра' CGRect.inset(by :)

Любая помощь с этим будет принята с благодарностью!

Ответ 1

Ошибка очень понятна. Вы можете использовать его следующим образом:

var animationRect = frame.inset(by: UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding))

или просто

var animationRect = frame.insetBy(dx: padding, dy: padding)

Ответ 2

Swift 4.2 и Xcode 10

Раньше это было так -

let bounds = UIEdgeInsetsEqualToEdgeInsets(view.bounds,view.safeAreaInsets)

Теперь для быстрого 4.2 -

let bounds = view.bounds.inset(by: view.safeAreaInsets)

Ответ 3

UIEdgeInsets в Swift 4.2

Более ранняя версия

let padding = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 5)
 override func textRect(forBounds bounds: CGRect) -> CGRect {
            return UIEdgeInsetsInsetRect(bounds, padding)
        }
to swift 4.2 and Xcode 10
let padding = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 5)
 override func textRect(forBounds bounds: CGRect) -> CGRect {
        return rect.inset(by: GlobalClass.language == "ar" ? paddingR : padding)
    }

Ответ 4

Проблемы такого рода с SWIFT_VERSION также можно решить, установив SWIFT_VERSION для конкретного модуля.

post_install do |installer|
  installer.pods_project.targets.each do |target|

    if ['MessageKit'].include? target.name
      target.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '5.0'
      end
    end

  end
end