Jika template ini tidak diisi, masalah Anda akan ditutup tanpa komentar. 🚫
Info | Nilai |
-------------------------|------------------------ -------------|
Platform | misalnya ios
Versi Platform | misalnya 10.0
Versi SnapKit | misalnya 4.0.0
Metode Integrasi | misalnya kartago
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)
}
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
}
}
Komentar yang paling membantu
@JonyFang Terima kasih atas jawaban Anda, Tapi saya sedang memikirkan cara jika penilaian versi iOS dapat dipindahkan ke SnapKit.