SORU
19 Mayıs 2015, Salı


Bugün boy Uzatma için iPad belirtilenden çok daha büyük

Bugün benim uzantısı widget görüntülüyor içeriğine bağlı olarak dinamik bir yüksekliğe sahip olması gerekir. Ben mümkün elde etmek için bu ekleyerek bir kısıtlama benim en alt öğe: alt düzen kılavuzu en az eşit yada alt en elemanın alt ile bir sabitin 0, öncelikli 999, çarpan 1.

Bu tam olarak iPhone beklendiği gibi çalışır - widget yüksekliği tüm içeriği uyuyor artı varsayılan alt kenar boşluğu sonraki widget gösterilmeden önce uygulanır.

Ama iPad gibi görünüyor ayarı benim widget yüksekliği eşit max yükseklik Bildirim Merkezi için widget - çok alanı altında benim widget, neredeyse tam ekran.

Nasıl bu ekstra alan kaldırabilir miyim?

Sorunun tam olarak ne olduğunu biliyorum ama bunu çözmek - "" bölüm. görmek için nasıl emin değilim Önce bana Kur açıklamaya çalışalım

Kurulum:
Bir film şeridi içinde, hiçbir şey programlı olarak yapılır bu uzantı görünüm kurdum. Görünüm 5 elemanları dikey olarak yığılmış, bazıları yatay olarak oluşur. Bu belirtilmemiş öncelik 1000, çarpan 1 olduğu alt üst - dikey çizgi için otomatik düzen kısıtlamaları vardır:

UILabel: height = 35, top space to top layout guide with constant of 10
UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999

Gerekli Davranış:

  • 4x4 düğmeleri tam genişlikli tek bir etiket altında bulunan bir kılavuz lazım
  • Her düğme aynı genişlik ve yükseklik - mükemmel kareler olmalıdır
  • Düğmeler son satırın altında ekstra alan

Sonuç:
enter image description here

Beklenen Sonuç:
enter image description here

Sorun:
En-Boy oranı kısıtlamaları tüm düğmeleri sonuna kadar dolaylı olarak heybetli bir 'örtülü' En-Boy oranı üzerinde bir kısıtlama yüksekliği widget görüntülemek için bunu gönderdi systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:, orada geçirilen gerekli genişlik (724) düzeni için en gerekli öncelik ve yükseklik 0 (sıkıştırmak görünümü) uygun seviyede öncelik. Bu görünümü ile başlamak için daha geniş olduğu iPad üzerinde uzun boylu widget bir görünüm ile sonuçlanır. Ama kaldırılabilir En Boy oranı gerçek kısıtlaması yoktur. Tüm düğmesinin kısıtlamaları En Boy oranı başvurdum çünkü aslında, bugün uzantısı yüksekliği genişliği (birlikte tüm kısıtlamalar, En Boy oranı ve başka türlü düşünen) bağlıdır. Böylece uzantısı yüksekliği geniş bir alanda hantal, iPad gibi geniş bir cihaz üzerinde kendini tezahür ediyor. Tuşlar üzerindeki kısıtlamaları yeniden, ya da bir şekilde ayarlanması gerekir.

Örnek Proje:
sample project that demonstrates the issue ve onunla oynayın, böylece CloudApp kullanılabilir.

Denedim ne var:
widgetMarginInsetsForProposedMarginInsets geçersiz kılma ve alt için 0 döndürerek varsayılan kenar boşluğu parçalar kaldırma denedim. Bu varsayılan dolgu kaldırma yüksekliği biraz azalmış, bu nedenle yaptım, ama hala bunun altında çok fazla alan var.

UILabel bir kısıtlama vardı: etiket superview eşit önde gelen lider 0, öncelikli 1000, 1 çarpan sabit. Eğer ben sadece değiştirmek superview için lidermarjekstra alt boşluğu sihirli bir şekilde kaybolur. Merak ettim, çünkü elemanları olmaya başlamıştı çok büyük, bu yüzden artan miktarda sol boşluk olurdu azalma büyüklüğü, ama denedim tutarak ayarlamak için düzenli bir lider ve artan sabit ve o yoktu çözmek sorunu. Ama bu sadece portre iPad için sorunu giderir. Ve hatta tamamen çözmek değil, büyük yükseklikte başlayıp aşağı Bildirim Merkezi çekersen her zaman uygun boyuta küçülür. Manzara hiç uygun boyuta küçültmek için.

Denenen Çözümler:

  • @Lefteris bu durumda işe yaramayacak olan boyutu, hardcoding önerilen yüksekliği dinamik ve widget birçok ekran için kullanılabilir gibi boyutları/yönelimleri.
  • @Yuyutsu çözmek için çalıştı, ama ne yazık ki gereksinimlerini karşılamıyor ve sergiler çelişkili kısıtlamaları ve değiştirilmiş bir düzen.

CEVAP
18 AĞUSTOS 2015, Salı


enter image description here

Nasıl bu elde:

  1. Senin kısıtlaması göz önünde bulundurmalısınız.

  2. Widget varsayılan kenar boşluğu parçalar düzgün istenilen şekilde yapılandırılmamış, kendi başına bu ayarı tek çözüm buraya çağırarak 'widgetMarginİnsetsForProposedMargininsets:'

// Güncelleme parçalar Aletler

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {

    println(NSStringFromUIEdgeInsets(defaultMarginInsets))
    return UIEdgeInsetsMake(20, 20, 10, 20)
}

Değiştirilmiş örnek dosya linki: Modified file

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • International Secret Agents Concerts

    Internationa

    2 Aralık 2008
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010