Snapkit: Peningkatan untuk SafeArea

Dibuat pada 26 Feb 2018  ·  8Komentar  ·  Sumber: SnapKit/SnapKit

Daftar Periksa Masalah Baru

Jika template ini tidak diisi, masalah Anda akan ditutup tanpa komentar. 🚫

  • [x] Saya telah melihat Dokumentasi
  • [x] Saya telah membaca FAQ
  • [x] Saya telah mengisi template masalah ini.

Info Masalah

Info | Nilai |
-------------------------|------------------------ -------------|
Platform | misalnya ios
Versi Platform | misalnya 10.0
Versi SnapKit | misalnya 4.0.0
Metode Integrasi | misalnya kartago

Deskripsi masalah

Hai, saya menggunakan SnapKit dalam proyek saya, Terima kasih telah menyediakan perpustakaan yang luar biasa.

Sejak pembaruan iOS 11, safeArea diimpor, dan terima kasih banyak telah menambahkan ekstensi safeArea di SnapKit. Karena saya perlu mendukung iOS10.0, saya harus memeriksa versi os di penutupan make, saya bertanya-tanya apakah mungkin membuat kode seperti

aView.snp.make { (make) in
   //other constraints
  if #available(iOS 11.0 *) {
      make.snp.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
  } else {
      make.snp.bottom.equalTo(view)
  }
}

ke

aView.snp.make { (make) in
   //other constraints
   make.snp.safeAreaBottom.equalTo(view)
}

Komentar yang paling membantu

@JonyFang Terima kasih atas jawaban Anda, Tapi saya sedang memikirkan cara jika penilaian versi iOS dapat dipindahkan ke SnapKit.

Semua 8 komentar

kami membutuhkan beberapa sampel.
https://github.com/imanoupetit/Margins-And-Safe-Area

@Cookiezby BTW jika Anda menggunakan safeAreaLayoutGuide.snp.top untuk menyelaraskan elemen, Anda kemungkinan besar ingin menggunakan topLayoutGuide.snp.bottom dari UIViewController :

// Inside view controller
sampleView.snp.makeConstraints { make in 
  if #available(iOS 11.0, *) {
    make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).inset(20)
  } else {
    make.top.equalTo(self.topLayoutGuide.snp.bottom).inset(20)
  }
}

Saya menggunakan safeAreaLayoutGuide dalam proyek saya. safeAreaLayoutGuide adalah UILayoutGuide, yang sudah dapat dihubungkan di SnapKit melalui snp . Berikut ini contohnya:

view.addSubview(tableView)
tableView.snp.makeConstraints { (make) in
    make.left.right.equalTo(view)
    if #available(iOS 11.0, *) {
        make.top.equalTo(view.safeAreaLayoutGuide.snp.topMargin)
    } else {
        make.top.equalTo(view)
    }
    if #available(iOS 11.0, *) {
        make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottomMargin)
    } else {
        make.bottom.equalTo(view)
    }
}

@JonyFang Terima kasih atas jawaban Anda, Tapi saya sedang memikirkan cara jika penilaian versi iOS dapat dipindahkan ke SnapKit.

Ada pembaruan untuk ini?

Itu akan sangat bagus! Ada pembaruan untuk ini?

Perubahan apapun?

tidak tahu apakah itu membantu

//
//  ClearTopBar.swift
//  Instories
//
//  Created by Vladyslav Yakovlev on 22.02.2018.
//  Copyright © 2018 Vladyslav Yakovlev. All rights reserved.
//

import UIKit
import SnapKit

extension UIView {
    var safeArea: ConstraintBasicAttributesDSL {
        if #available(iOS 11.0, *) {
            return self.safeAreaLayoutGuide.snp
        }
        return self.snp
    }

    func dropShadow() {
        self.layer.masksToBounds = false
        self.layer.shadowColor = UIColor.lightGray.cgColor
        self.layer.shadowOpacity = 1.0
        self.layer.shadowRadius = 10
        self.layer.shadowOffset = CGSize(width: 3, height: 3)
    }

    var isIphoneX: Bool {

        if #available(iOS 11.0, *) {
            if topSafeAreaInset > CGFloat(0) {
                return true
            } else {
                return false
            }
        } else {
            return false
        }

    }

    var topSafeAreaInset: CGFloat {
        let window = UIApplication.shared.keyWindow
        var topPadding: CGFloat = 0
        if #available(iOS 11.0, *) {
            topPadding = window?.safeAreaInsets.top ?? 0
        }

        return topPadding
    }

    var bottomSafeAreaInset: CGFloat {
        let window = UIApplication.shared.keyWindow
        var bottomPadding: CGFloat = 0
        if #available(iOS 11.0, *) {
            bottomPadding = window?.safeAreaInsets.bottom ?? 0
        }

        return bottomPadding
    }
}

tidak menggunakan di atas / sebagai gantinya saya menargetkan perangkat yang berbeda seperti di bawah ini

PENOLAKAN - Saya memiliki iphone 8 - jadi logika ini diperlukan untuk kode saya.

PSUEDOCODE di sini

  pod 'Device', :git => 'https://github.com/ozgur/Device.git'

    myViewHere.snp.makeConstraints { (make) in
            if Device.needsSafeAreaBecausePhoneIsHuge() {
                make.bottom.equalToSuperview().offset(-100)
            } else {
                make.bottom.equalToSuperview().offset(-40)
            }
            make.width.left.equalToSuperview()
            make.height.equalTo(93)
        }

extension Device {

    static func needsSafeAreaBecausePhoneIsHuge() -> Bool {
        let version = Device.versionOnSimulator()
        switch version {
        case .iPhoneX, .iPhoneXR, .iPhoneXS, .iPhoneXS_Max, .iPhone11, .iPhone11Pro, .iPhone11Pro_Max, .iPhone12, .iPhone12Pro, .iPhone12Pro_Max:
            return true
        default:
            return false
        }
    }
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mkoppanen picture mkoppanen  ·  3Komentar

Shehryar picture Shehryar  ·  7Komentar

lolgear picture lolgear  ·  5Komentar

MoShenGuo picture MoShenGuo  ·  4Komentar

NicholasTD07 picture NicholasTD07  ·  8Komentar