web-dev-qa-db-ja.com

UIEdgeInsetsInsetRect 'は、インスタンスメソッド' CGRect.inset(by :)に置き換えられました

ポッドの更新を待たずに、プロジェクトをSwift 4.2に更新するというミスを犯しました。私はゆっくりとすべてのコードを更新しましたが、理解できないように見える行が1つあります。

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

私が受け取るエラーは、

UIEdgeInsetsInsetRect 'は、インスタンスメソッド' CGRect.inset(by :)に置き換えられました

これに関する助けは大歓迎です!

25
Dustin Johnson

エラーは自明です。次のように使用できます。

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

または単に

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

Swift 4.2およびXcode 1

以前はこんな感じでした-

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

Swift 4.2の場合-

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

Swift 4.2のUIEdgeInsets

以前のバージョン

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)
    }
1
Karthickkck

ポッドに関するこの種の問題は、特定のポッドに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
0
wzbozon