Xcode 9'un Güvenli Alanı


150

Xcode9 Beta'yı keşfederken Arabirim oluşturucularda Güvenli Alan Bulundu Hiyerarşi görüntüleyiciyi görüntüleyin. Merak ettim ve Apple Güvenli Alan dokümantasyon hakkında bilmek çalıştı, özgeçmiş doktor "Otomatik düzeni ile doğrudan etkileşim görünüm alanı" diyor Ama beni tatmin etmedi, bilmek istiyorum Bu yeni şey Pratik kullanımı.

Herhangi bir ipucu var mı?

resim açıklamasını buraya girin

Güvenli alan için Apple doc'den sonuç paragrafı.

UILayoutGuide sınıfı, daha önce kukla görünümler tarafından gerçekleştirilen tüm görevleri gerçekleştirmek, ancak bunu daha güvenli ve daha verimli bir şekilde yapmak için tasarlanmıştır. Düzen kılavuzları yeni bir görünüm tanımlamaz. Görünüm hiyerarşisine katılmazlar. Bunun yerine, kendi görünümlerinin koordinat sisteminde Otomatik Düzen ile etkileşime girebilecek dikdörtgen bir bölge tanımlarlar.


1
WWDC Seansını izleyebilirsiniz. Burada her şey açıklanıyor. İsimden emin değilim. Adında Xcode veya InterfaceBuilder ile ilgili bir şey.
Maik639

Yanıtlar:


282

Güvenli Alan bir düzen kılavuzudur ( Güvenli Alan Yerleşim Kılavuzu ) .
Görünümünüzün çubuklar ve diğer içerikler tarafından etkilenmeyen bölümünü temsil eden düzen kılavuzu. İOS 11 ve sonraki sürümlerinde, Apple üst ve alt düzen kılavuzlarını kullanımdan kaldırıyor ve bunları tek bir güvenli alan düzeni kılavuzuyla değiştiriyor.

Görünüm ekranda göründüğünde, bu kılavuz görünümün diğer içerik tarafından kaplanmayan kısmını yansıtır. Bir görünümün güvenli alanı, gezinme çubukları, sekme çubukları, araç çubukları ve görünüm denetleyicisinin görünümünü gizleyen diğer ataların kapsadığı alanı yansıtır. (TvOS'ta, güvenli alan overscanCompensationInsetsUIScreen'in özelliği tarafından tanımlanan ekran çerçevesini içerir.) Ayrıca, görünüm denetleyicisinin additionalSafeAreaInsetsözelliği tarafından tanımlanan ek alanları da kapsar . Görünüm şu anda bir görünüm hiyerarşisine yüklenmemişse veya henüz ekranda görünmüyorsa, düzen kılavuzu her zaman görünümün kenarlarıyla eşleşir.

Görünüm denetleyicisinin kök görünümü için, bu özellikteki güvenli alan, görünüm denetleyicisinin içeriğinin gizlenmiş olan tüm bölümünü ve belirttiğiniz ek ekleri temsil eder. Görünüm hiyerarşisindeki diğer görünümler için, güvenli alan yalnızca o görünümün gizlenmiş olan kısmını yansıtır. Örneğin, bir görünüm tamamen görünüm denetleyicisinin kök görünümünün güvenli alanı içindeyse, bu özellikteki kenar iç metinleri 0 olur.

Apple'a göre, Xcode 9 - Sürüm notu
Interface Builder, UIViewController'daki kullanımdan kaldırılan Üst ve Alt düzen kılavuzlarının yerine UIView.safeAreaLayoutGuide kullanır. Yeni güvenli alanı kullanmak için, görünüm denetleyicisinin Dosya denetçisinde Güvenli Alan Düzeni Kılavuzları'nı seçin ve ardından içeriğinizle yeni güvenli alan çapaları arasında kısıtlamalar ekleyin. Bu, içeriğinizin üst ve alt çubuklar ile tvOS'taki aşırı tarama bölgesi tarafından gizlenmesini önler. Güvenli alandaki kısıtlamalar, iOS'un önceki sürümlerine dağıtılırken Üst ve Alt'a dönüştürülür.

resim açıklamasını buraya girin


Mevcut (Üst ve Alt) Düzen Kılavuzu ve Güvenli Alan Düzeni Kılavuzu arasında bir karşılaştırma (benzer görsel efekt yapmak için) basit referans.

Güvenli Alan Düzeni: resim açıklamasını buraya girin

AutoLayout

resim açıklamasını buraya girin


Güvenli Alan Düzeni ile nasıl çalışılır?

Çözüm bulmak için şu adımları izleyin:

  • Etkin değilse, 'Güvenli Alan Düzeni'ni etkinleştirin.
  • Süper görünüm ile bağlantı gösteriyorsa 'tüm kısıtlamaları' kaldırın ve hepsini güvenli yerleşim bağlantı noktasıyla yeniden takın. VEYA Bir kısıtlamaya çift tıklayın ve süper görünümden SafeArea bağlantısına bağlantıyı düzenleyin

Örnek anlık görüntü, güvenli alan düzenini etkinleştirme ve kısıtlamayı düzenleme.

resim açıklamasını buraya girin

Yukarıdaki değişikliklerin sonucu

resim açıklamasını buraya girin


SafeArea ile Mizanpaj Tasarımı
iPhone X için tasarlarken, mizanpajların ekranı doldurduğundan ve cihazın yuvarlak köşeleri, sensör muhafazası veya Ana ekrana erişim göstergesi tarafından gizlenmediğinden emin olmalısınız.

resim açıklamasını buraya girin

Gezinme çubukları, tablolar ve koleksiyonlar gibi standart, sistem tarafından sağlanan UI öğelerini kullanan çoğu uygulama otomatik olarak cihazın yeni form faktörüne uyarlanır. Arka plan malzemeleri ekranın kenarlarına uzanır ve UI öğeleri uygun şekilde yerleştirilir ve yerleştirilir.

resim açıklamasını buraya girin

Özel düzenleri olan uygulamalar için, özellikle uygulamanız Otomatik Düzen kullanıyorsa ve güvenli alan ve kenar boşluğu düzeni kılavuzlarına uyuyorsa, iPhone X'i desteklemek nispeten kolay olmalıdır.

resim açıklamasını buraya girin


Örnek kod (Ref from: Safe Area Layout Guide ) :
Kodda kısıtlamalarınızı oluşturursanız, ilgili yerleşim bağlantılarını almak için UIView'un safeAreaLayoutGuide özelliğini kullanın. Nasıl göründüğünü görmek için yukarıdaki Interface Builder örneğini kodda yeniden oluşturalım:

Görünüm denetleyicimizde yeşil görünümün bir özellik olduğunu varsayarsak:

private let greenView = UIView()

ViewDidLoad denilen görünümleri ve kısıtlamaları ayarlamak için bir fonksiyonumuz olabilir:

private func setupView() {
  greenView.translatesAutoresizingMaskIntoConstraints = false
  greenView.backgroundColor = .green
  view.addSubview(greenView)
}

Kök görünümünün layoutMarginsGuide öğesini kullanarak her zamanki gibi önde gelen ve sondaki kenar boşluğu kısıtlamalarını oluşturun:

 let margins = view.layoutMarginsGuide
    NSLayoutConstraint.activate([
      greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
      greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
 ])

Şimdi iOS 11'i hedeflemiyorsanız, yalnızca güvenli alan düzeni kılavuzu kısıtlamalarını # mevcut olanlara sarmanız ve önceki iOS sürümleri için üst ve alt düzen kılavuzlarına geri dönmeniz gerekecek:

if #available(iOS 11, *) {
  let guide = view.safeAreaLayoutGuide
  NSLayoutConstraint.activate([
   greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
   guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
   ])

} else {
   let standardSpacing: CGFloat = 8.0
   NSLayoutConstraint.activate([
   greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),
   bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)
   ])
}


Sonuç:

resim açıklamasını buraya girin


UIViewUzantıyı takiben , SafeAreaLayout ile programlı olarak çalışmanızı kolaylaştırın.

extension UIView {

  // Top Anchor
  var safeAreaTopAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.topAnchor
    } else {
      return self.topAnchor
    }
  }

  // Bottom Anchor
  var safeAreaBottomAnchor: NSLayoutYAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.bottomAnchor
    } else {
      return self.bottomAnchor
    }
  }

  // Left Anchor
  var safeAreaLeftAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.leftAnchor
    } else {
      return self.leftAnchor
    }
  }

  // Right Anchor
  var safeAreaRightAnchor: NSLayoutXAxisAnchor {
    if #available(iOS 11.0, *) {
      return self.safeAreaLayoutGuide.rightAnchor
    } else {
      return self.rightAnchor
    }
  }

}

Objective-C örnek kod :


İşte Güvenli Alan Düzeni Kılavuzu için Apple Developer Resmi Belgeleri


İPhone-X için kullanıcı arayüzü tasarımını yönetmek için Güvenli Alan gereklidir. İşte temel yol göstericidir Güvenli Alan Düzeni kullanarak iPhone X için kullanıcı arayüzü tasarımı nasıl


Arasındaki fark gelince marginsve view.leadingAnchorkullandığınızda: let margins = view.layoutMarginsGuideve sonraki kullanımını margins.leadingAnchoryapmanız görünümü kısıtlayıcı olan marjlar bakış. Bu, kenarlara fazladan boşluk katacaktır. Bunu istemiyorsanız, sadece kullanın view.leadingAnchorve view.trailingAnchorsolda veya sağda herhangi bir beyaz boşluk görmezsiniz ...
Bal

Do Eğer demek değil "bir bakış güvenli alan bir görünüm kontrolörün görüntüsünü gizlemek gezinti çubukları, sekme çubukları, araç çubukları ve diğer ataları kapsadığı alan yansıtır" değil örtülü? Belgede " çubuklar ve diğer içeriklerden etkilenmeyen " yazıyor .
Bal

Xcode 10.1'de, Güvenli Alan'ın tam ekran Görünümü'nde ekranın altına kadar uzanmayacağı garip bir davranış gördüm. Yanlışlıkla bir 'Sekme Çubuğu' altına sürükleyip silerek neden olduğuna inanıyorum. Bu satırı, bir metin düzenleyicisiyle el ile sildiğim .storyboard dosyasında buldum. <simulatedToolbarMetrics key = "simulatedBottomBarMetrics" />. Bu sorunu düzeltti.
Dave Hubbard

20

Değinmek istediğim ben yuvarlak kenarları ve yeni iPhone X "çentik" önlemek için bir SpriteKit tabanlı uygulamayı adapte etmeye çalışırken son önerdiği gibi, ilk beni yakaladı şey İnsan Arabirimi Rehberi yeni özellik: safeAreaLayoutGuideait UIViewihtiyaçlarına anlamlı bir düzen çerçevesini bildirmek için görünüm hiyerarşiye (örneğin, açık ) eklendikten sonra sorgulanmalıdır -viewDidAppear:(aksi takdirde tam ekran boyutunu döndürür).

Tesisin belgelerinden:

Görünümünüzün çubuklar ve diğer içerikler tarafından etkilenmeyen bölümünü temsil eden düzen kılavuzu. Görünüm ekranda göründüğünde , bu kılavuz görünümün gezinme çubukları, sekme çubukları, araç çubukları ve diğer ata görünümleri tarafından kapsanmayan kısmını yansıtır. (TvOS'ta, güvenli alan ekranın çerçevesini kaplamamış alanı yansıtır.) Görünüm şu anda bir görünüm hiyerarşisine yüklenmemişse veya henüz ekranda görünmüyorsa, düzen kılavuzu kenarları görünümün kenarlarına eşittir .

(benimkini vurgula)

Eğer erken olarak okursanız -viewDidLoad:, layoutFramekılavuzun olacak {{0, 0}, {375, 812}}yerine beklendiği arasında{{0, 44}, {375, 734}}


Burada aynı. Dokümanları tam olarak okumadan her zaman sadece isimleriyle yönlendirilen bir tipin mevcut özelliklerine
atlarım

18

resim açıklamasını buraya girin

  • İOS 7,0-11,0 <önceki DEPRECATED > UIKitkullanır topLayoutGuide & bottomLayoutGuide olan UIViewmülkiyet
  • iOS11 + kullanan safeAreaLayoutGuide da UIViewözelliği

  • Dosya denetçisinden Güvenli Alan Düzeni Kılavuzu onay kutusunu etkinleştir .

  • Güvenli alanlar, görünümlerinizi genel arayüzün görünür kısmına yerleştirmenize yardımcı olur.

  • Gelen tvOS , güvenli alan da ekranın çerçeve kapsadığı alanı temsil ekranın tekrar tarama-parçalar içerir.

  • safeAreaLayoutGuide, görünümün gezinme çubukları, sekme çubukları, araç çubukları ve diğer ata görünümleri tarafından kapsanmayan kısmını yansıtır.
  • Güvenli alanları, UIButton vb. Gibi içeriklerinizi düzenlemeye yardımcı olarak kullanın .

  • İPhone X için tasarım yaparken, mizanpajların ekranı doldurduğundan ve cihazın yuvarlak köşeleri, sensör muhafazası veya Ana ekrana erişim göstergesi tarafından gizlenmediğinden emin olmalısınız.

  • Arka planların ekranın kenarlarına kadar uzandığından ve tablolar ve koleksiyonlar gibi dikey olarak kaydırılabilen düzenlerin en alta kadar devam ettiğinden emin olun.

  • Durum çubuğu iPhone X'ta diğer iPhone'lardan daha uzundur. Uygulamanız içeriği durum çubuğunun altına konumlandırmak için sabit bir durum çubuğu yüksekliği varsayarsa, içeriği kullanıcının cihazına göre dinamik olarak konumlandırmak için uygulamanızı güncellemeniz gerekir. Ses kaydı ve konum izleme gibi arka plan görevleri etkinken iPhone X'daki durum çubuğunun yüksekliğini değiştirmediğini unutmayın print(UIApplication.shared.statusBarFrame.height)//44 for iPhone X, 20 for other iPhones

  • Ev gösterge kabının yüksekliği 34 puandır.

  • Güvenli Alan Düzeni Kılavuzu'nu etkinleştirdikten sonra , arayüz oluşturucuda listelenen güvenli alan kısıtlamaları özelliğini görebilirsiniz.

resim açıklamasını buraya girin

Sen ilgili olan sınırlamalar ayarlayabilirsiniz self.view.safeAreaLayoutGuideAS-

objc:

  self.demoView.translatesAutoresizingMaskIntoConstraints = NO;
    UILayoutGuide * guide = self.view.safeAreaLayoutGuide;
    [self.demoView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor].active = YES;
    [self.demoView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor].active = YES;
    [self.demoView.topAnchor constraintEqualToAnchor:guide.topAnchor].active = YES;
    [self.demoView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor].active = YES;

Swift:

   demoView.translatesAutoresizingMaskIntoConstraints = false
        if #available(iOS 11.0, *) {
            let guide = self.view.safeAreaLayoutGuide
            demoView.trailingAnchor.constraint(equalTo: guide.trailingAnchor).isActive = true
            demoView.leadingAnchor.constraint(equalTo: guide.leadingAnchor).isActive = true
            demoView.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true
            demoView.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true
        } else {
            NSLayoutConstraint(item: demoView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
            NSLayoutConstraint(item: demoView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
        }

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


Bu madde işareti kılavuzunu çok yararlı buluyorum, ancak "Güvenli alan gezinme çubuklarını, sekme çubuklarını, araç çubuklarını ve diğer ata görünümlerini kapsamıyor" tam olarak ne anlama geliyor?
Chewie Chorkie

1
Örnek - Yukarıdaki son ekranda olduğu gibi safreAreaGuide tarafından kapsanmayan Araç Çubuğu (Bugün, Takvimler ve gelen kutusu)
Jack

8

Apple, iOS 7'de UIViewController'ın özellikleri olarak topLayoutGuide ve bottomLayoutGuide'ı tanıttı. İçeriğinizin durum, gezinme veya sekme çubuğu gibi UIKit çubukları tarafından gizlenmesini önlemek için kısıtlamalar oluşturmanıza izin verdiler. Bu düzen kılavuzları iOS 11'de kullanımdan kaldırıldı ve bunların yerine tek bir güvenli alan düzeni kılavuzu eklendi.

Daha fazla bilgi için bağlantıya bakın .


5

Güvenli Alan Yerleşim Kılavuzu, içeriği ve denetimleri konumlandırırken Sistem UI öğelerinin alt üste binmesini önlemeye yardımcı olur.

Güvenli Alan, Durum Çubuğu, Gezinme Çubuğu ve Araç Çubuğu veya Sekme Çubuğu olan Sistem UI öğeleri arasındaki alandır. Uygulamanıza bir Durum çubuğu eklediğinizde Güvenli Alan küçülür. Uygulamanıza bir Gezinme Çubuğu eklediğinizde Güvenli Alan tekrar daralır.

İPhone X'da Güvenli Alan, hiçbir çubuk gösterilmese bile dikey olarak üst ve alt ekran kenarlarından ek iç metin sağlar. Peyzajda, Güvenli Alan ekranların yanlarından ve ev göstergesinden eklenmiştir.

Bu, farklı öğelerin Güvenli Alanı nasıl etkilediğini görselleştirdikleri Apple'ın iPhone X için Designing adlı videosundan alınmıştır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.