Otomatik Yerleşimi Kullanarak UICollectionView'da Hücrelerin bir Boyutunu Belirtme


113

İOS 8'de, UICollectionViewFlowLayouthücreleri kendi içerik boyutlarına göre otomatik olarak yeniden boyutlandırmayı destekler. Bu, hücreleri içeriklerine göre hem genişlik hem de yükseklikte yeniden boyutlandırır.

Tüm hücrelerin genişliği (veya yüksekliği) için sabit bir değer belirtmek ve diğer boyutların yeniden boyutlandırılmasına izin vermek mümkün müdür?

Basit bir örnek olarak, bir hücredeki kısıtlamaların onu hücrenin yanlarına konumlandıran çok satırlı bir etiketi düşünün. Çok satırlı etiket, metne uyum sağlamak için farklı şekillerde yeniden boyutlandırılabilir. Hücre, koleksiyon görünümünün genişliğini doldurmalı ve yüksekliğini buna göre ayarlamalıdır. Bunun yerine, hücreler gelişigüzel boyutlandırılır ve hatta hücre boyutu koleksiyon görünümünün kaydırılamayan boyutundan daha büyük olduğunda bir çökmeye neden olur.


iOS 8, yöntemi sunar systemLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority:Koleksiyon görünümündeki her hücre için düzen, tahmini boyutu ileterek hücrede bu yöntemi çağırır. Bana mantıklı gelen şey, bu yöntemi hücre üzerinde geçersiz kılmak, verilen boyutu geçmek ve yatay kısıtlamayı gerekli olarak ayarlamak ve dikey kısıtlamaya düşük öncelik vermek olacaktır. Bu şekilde yatay boyut, düzende belirlenen değere sabitlenir ve dikey boyut esnek olabilir.

Bunun gibi bir şey:

- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
    UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes];
    attributes.size = [self systemLayoutSizeFittingSize:layoutAttributes.size withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
    return attributes;
}

Ancak bu yöntemle verilen boyutlar tamamen gariptir. Bu yöntemle ilgili dokümantasyon benim için çok net değil ve UILayoutFittingCompressedSize UILayoutFittingExpandedSizesadece sıfır boyutu ve oldukça büyük olan sabitleri kullanarak bahsediyor .

Is sizegerçekten bu yöntemle sadece bir yol parametresi iki sabitleri geçmek? Belirli bir beden için uygun yüksekliğe ulaşmayı beklediğim davranışa ulaşmanın bir yolu yok mu?


Alternatif Çözümler

1) Hücre için belirli bir genişlik belirtecek kısıtlamalar eklemek doğru düzeni sağlar. Bu kötü bir çözümdür çünkü bu kısıtlama, güvenli bir referansı olmayan hücrenin koleksiyon görünümünün boyutuna ayarlanmalıdır. Bu kısıtlamanın değeri, hücre yapılandırıldığında geçirilebilir, ancak bu da tamamen mantıksız görünmektedir. Bu aynı zamanda tuhaftır çünkü bir hücreye veya içerik görünümüne doğrudan sınırlamalar eklemek birçok soruna neden olur.

2) Bir tablo görünümü kullanın. Tablo görünümleri, hücrelerin sabit bir genişliğe sahip olması nedeniyle kutudan çıkar çıkmaz bu şekilde çalışır, ancak bu, birden çok sütunda sabit genişlikte hücrelere sahip bir iPad düzeni gibi diğer durumları karşılamaz.

Yanıtlar:


135

İstediğiniz şey UITableView gibi bir düzen oluşturmak için UICollectionView kullanmanın bir yolu gibi görünüyor. Gerçekten istediğiniz buysa, bunu yapmanın doğru yolu, özel bir UICollectionViewLayout alt sınıfı (belki SBTableLayout gibi bir şey ) kullanmaktır.

Öte yandan, bunu varsayılan UICollectionViewFlowLayout ile yapmanın temiz bir yolu olup olmadığını gerçekten soruyorsanız, o zaman hiçbir yolu olmadığına inanıyorum. İOS8'in kendi boyutlarını belirleyen hücreleriyle bile, bu kolay değildir. Sizin de söylediğiniz gibi temel sorun, akış düzeninin mekanizmasının bir boyutu düzeltip diğerinin yanıt vermesine izin vermemesidir. (Buna ek olarak, yapabilseniz bile, çok satırlı etiketleri boyutlandırmak için iki düzen geçişine ihtiyaç duyma konusunda ek bir karmaşıklık olacaktır. Bu, kendi boyutlarını belirleyen hücrelerin systemLayoutSizeFittingSize'a yapılan tek bir çağrı aracılığıyla tüm boyutlandırmayı nasıl hesaplamak istediğine uymayabilir.)

Bununla birlikte, kendi boyutlarını belirleyen ve koleksiyon görünümünün genişliğine doğal olarak yanıt veren hücrelerle akış düzenine sahip bir tablo görünümüne benzer düzen oluşturmak istiyorsanız, elbette bu mümkündür. Hâlâ dağınık bir yol var. Bunu bir "boyutlandırma hücresi" ile yaptım, yani denetleyicinin yalnızca hücre boyutlarını hesaplamak için sakladığı görüntülenmeyen bir UICollectionViewCell.

Bu yaklaşımın iki bölümü var. İlk bölüm, koleksiyon görünümü temsilcisinin koleksiyon görünümünün genişliğini alarak ve hücrenin yüksekliğini hesaplamak için boyutlandırma hücresini kullanarak doğru hücre boyutunu hesaplaması içindir.

UICollectionViewDelegateFlowLayout'unuzda, aşağıdaki gibi bir yöntem uygularsınız:

func collectionView(collectionView: UICollectionView,
  layout collectionViewLayout: UICollectionViewLayout,
  sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
  // NOTE: here is where we say we want cells to use the width of the collection view
   let requiredWidth = collectionView.bounds.size.width

   // NOTE: here is where we ask our sizing cell to compute what height it needs
  let targetSize = CGSize(width: requiredWidth, height: 0)
  /// NOTE: populate the sizing cell's contents so it can compute accurately
  self.sizingCell.label.text = items[indexPath.row]
  let adequateSize = self.sizingCell.preferredLayoutSizeFittingSize(targetSize)
  return adequateSize
}

Bu, koleksiyon görünümünün hücrenin genişliğini çevreleyen koleksiyon görünümüne göre ayarlamasına neden olur, ancak daha sonra boyutlandırma hücresinden yüksekliği hesaplamasını ister.

İkinci kısım, boyutlandırma hücresinin yüksekliği hesaplamak için kendi AL sınırlamalarını kullanmasını sağlamaktır. Bu, çok satırlı UILabel'in etkili bir şekilde iki aşamalı bir yerleşim süreci gerektirmesi nedeniyle olması gerekenden daha zor olabilir. İş şu yöntemle yapılır preferredLayoutSizeFittingSize:

 /*
 Computes the size the cell will need to be to fit within targetSize.

 targetSize should be used to pass in a width.

 the returned size will have the same width, and the height which is
 calculated by Auto Layout so that the contents of the cell (i.e., text in the label)
 can fit within that width.

 */
 func preferredLayoutSizeFittingSize(targetSize:CGSize) -> CGSize {

   // save original frame and preferredMaxLayoutWidth
   let originalFrame = self.frame
   let originalPreferredMaxLayoutWidth = self.label.preferredMaxLayoutWidth

   // assert: targetSize.width has the required width of the cell

   // step1: set the cell.frame to use that width
   var frame = self.frame
   frame.size = targetSize
   self.frame = frame

   // step2: layout the cell
   self.setNeedsLayout()
   self.layoutIfNeeded()
   self.label.preferredMaxLayoutWidth = self.label.bounds.size.width

   // assert: the label's bounds and preferredMaxLayoutWidth are set to the width required by the cell's width

   // step3: compute how tall the cell needs to be

   // this causes the cell to compute the height it needs, which it does by asking the 
   // label what height it needs to wrap within its current bounds (which we just set).
   let computedSize = self.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)

   // assert: computedSize has the needed height for the cell

   // Apple: "Only consider the height for cells, because the contentView isn't anchored correctly sometimes."
   let newSize = CGSize(width:targetSize.width,height:computedSize.height)

   // restore old frame and preferredMaxLayoutWidth
   self.frame = originalFrame
   self.label.preferredMaxLayoutWidth = originalPreferredMaxLayoutWidth

   return newSize
 }

(Bu kod, "Gelişmiş Koleksiyon Görünümü" ndeki WWDC2014 oturumunun örnek kodundan Apple örnek kodundan uyarlanmıştır.)

Dikkat edilmesi gereken birkaç nokta. Etiket genişliğini hesaplamak ve ayarlamak için tüm hücrenin düzenini zorlamak için layoutIfNeeded () kullanıyor. Ama bu yeterli değil. Ayrıca preferredMaxLayoutWidthetiketin Otomatik Yerleşim ile bu genişliği kullanması için ayarlamanız gerektiğine inanıyorum . Ve ancak o zaman systemLayoutSizeFittingSizehücrenin etiketi dikkate alırken yüksekliğini hesaplamasını sağlamak için kullanabilirsiniz .

Bu yaklaşımı beğendim mi? Hayır!! Çok karmaşık geliyor ve iki kez düzen yapıyor. Ancak performans bir sorun haline gelmediği sürece, mizanpajı kodda iki kez tanımlamak yerine çalışma zamanında iki kez gerçekleştirmeyi tercih ederim, bu da tek alternatif gibi görünüyor.

Umudum, sonunda kendi kendine boyutlandırılan hücrelerin farklı şekilde çalışacağı ve tüm bunların çok daha basit hale geleceği.

İş yerinde gösteren örnek proje .

Ama neden sadece kendi kendine boyutlandırma hücreleri kullanmıyorsunuz?

Teorik olarak, iOS8'in "kendi kendini boyutlandıran hücreler" için sunduğu yeni olanaklar bunu gereksiz hale getirmelidir. Otomatik Düzen (AL) ile bir hücre tanımladıysanız, koleksiyon görünümü, kendisini boyutlandırmasına ve doğru bir şekilde yerleştirmesine izin verecek kadar akıllı olmalıdır. Pratikte, bunu çok satırlı etiketlerle çalıştıran hiçbir örnek görmedim. Bence bu kendini boyutlandırma hücre mekanizması hala arabası olmasından kaynaklanır.

Ancak bahse girerim bunun büyük ölçüde Otomatik Yerleşim ve etiketlerin olağan yanıltıcılığından kaynaklanmaktadır, bu da UILabels'ın temelde iki aşamalı bir düzen süreci gerektirmesidir. Her iki adımı da kendi kendine boyutlandıran hücrelerle nasıl gerçekleştirebileceğiniz net değil.

Ve dediğim gibi, bu gerçekten farklı bir düzen için bir iş. Genişliği sabitlemek ve yüksekliğini seçmelerine izin vermek yerine boyutu olan şeyleri konumlandırması akış düzeninin özünün bir parçasıdır.

Peki ya preferLayoutAttributesFittingAttributes:?

preferredLayoutAttributesFittingAttributes:Yöntem kırmızı ringa, sanırım. Bu, yalnızca yeni kendi kendine boyutlandırma hücre mekanizmasıyla kullanılacak. Yani mekanizma güvenilmez olduğu sürece cevap bu değil.

Ve systemlayoutSizeFittingSize ile neler oluyor :?

Haklısın, dokümanlar kafa karıştırıcı.

Üzerine dokümanlar systemLayoutSizeFittingSize:ve systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:hem sadece geçirmesi gerektiğini düşündürmektedir UILayoutFittingCompressedSizeve UILayoutFittingExpandedSizeolarak targetSize. Ancak yöntem imzasının kendisi, üstbilgi yorumları ve işlevlerin davranışı, bunların targetSizeparametrenin tam değerine yanıt verdiklerini gösterir .

Aslında, UICollectionViewFlowLayoutDelegate.estimatedItemSizeyeni kendi kendine boyutlandırma hücre mekanizmasını etkinleştirmek için ayarlarsanız , bu değer targetSize olarak aktarılıyor gibi görünür. Ve ile UILabel.systemLayoutSizeFittingSizeaynı değerleri döndürüyor gibi görünüyor UILabel.sizeThatFits. Argümanının systemLayoutSizeFittingSizekaba bir hedef olduğu ve argümanının sizeThatFits:maksimum sınırlayıcı boyut olduğu varsayıldığında , bu şüphelidir .

Daha fazla kaynak

Böyle rutin bir gereksinimin "araştırma kaynakları" gerektirmesi gerektiğini düşünmek üzücü olsa da, bence öyle. İyi örnekler ve tartışmalar:


Çerçeveyi neden eski çerçeveye geri döndürüyorsunuz?
vrwim

Bunu, işlevin, aradığınız görünümün düzen durumunu etkilemeden, yalnızca görünümün tercih edilen düzen boyutunu belirlemek için kullanılabilmesi için yapıyorum. yerleşim hesaplamaları yapmak. Ayrıca burada yaptıklarım yetersiz. Düzen gerçekleştirmek alt görünümlerin düzenlerini değiştirmiş olabileceğinden, çerçeveyi tek başına geri yüklemek, onu önceki durumuna geri döndürmez.
algal

1
Bu, insanların ios6'dan beri yaptığı bir şey için tam bir karmaşa. Apple her zaman bir şekilde çıkar ama asla tam olarak doğru değildir.
GregP

1
ViewDidLoad'da boyutlandırma hücresini manuel olarak başlatabilir ve özel bir özelliği görüntülemek için tutabilirsiniz. Bu sadece bir hücre, bu yüzden ucuz. Bunu yalnızca boyutlandırma için kullandığınız ve onunla tüm etkileşimi yönettiğiniz için, koleksiyon görünümünün hücre yeniden kullanım mekanizmasına katılmanız gerekmez, bu nedenle onu koleksiyon görünümünden almanıza gerek kalmaz.
algal

1
Kendini boyutlandıran hücreler nasıl hâlâ kırılabilir ?!
Reuben Scratton

50

Bunu yapmanın buradaki diğer cevaplardan daha temiz bir yolu var ve iyi çalışıyor. Performanslı olmalıdır (koleksiyon görünümleri hızlı yüklenir, gereksiz otomatik düzen geçişleri olmaz, vb.) Ve sabit bir koleksiyon görünümü genişliği gibi "sihirli sayılar" içermemelidir. Koleksiyon görünümü boyutunu değiştirmek, örneğin döndürme sırasında ve ardından düzeni geçersiz kılmak da harika çalışmalıdır.

1. Aşağıdaki akış düzeni alt sınıfını oluşturun

class HorizontallyFlushCollectionViewFlowLayout: UICollectionViewFlowLayout {

    // Don't forget to use this class in your storyboard (or code, .xib etc)

    override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
        let attributes = super.layoutAttributesForItemAtIndexPath(indexPath)?.copy() as? UICollectionViewLayoutAttributes
        guard let collectionView = collectionView else { return attributes }
        attributes?.bounds.size.width = collectionView.bounds.width - sectionInset.left - sectionInset.right
        return attributes
    }

    override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let allAttributes = super.layoutAttributesForElementsInRect(rect)
        return allAttributes?.flatMap { attributes in
            switch attributes.representedElementCategory {
            case .Cell: return layoutAttributesForItemAtIndexPath(attributes.indexPath)
            default: return attributes
            }
        }
    }
}

2. Otomatik boyutlandırma için koleksiyon görünümünüzü kaydedin

// The provided size should be a plausible estimate of the actual
// size. You can set your item size in your storyboard
// to a good estimate and use the code below. Otherwise,
// you can provide it manually too, e.g. CGSize(width: 100, height: 100)

flowLayout.estimatedItemSize = flowLayout.itemSize

3. Hücre alt sınıfınızda önceden tanımlanmış genişliği + özel yüksekliği kullanın

override func preferredLayoutAttributesFittingAttributes(layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    layoutAttributes.bounds.size.height = systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    return layoutAttributes
}

8
Bu, kendi kendine boyutlandırma konusunda bulduğum en büyük cevap. Teşekkürler Jordan!
haik.ampardjian

1
Bunun iOS (9.3) üzerinde çalışmasını sağlayamıyorum. 10'da iyi çalışıyor. Uygulama _updateVisibleCells'de (sonsuz özyineleme?) Çöküyor. openradar.me/25303115
cristiano2lopes

@ cristiano2lopes iOS 9.3'te benim için iyi çalışıyor. Makul bir tahmin sağladığınızdan ve hücre kısıtlamalarınızın doğru bir boyuta çözümlenecek şekilde ayarlandığından emin olun.
Ürdün Smith

Bu harika çalışıyor. Xcode 8 kullanıyorum ve iOS 9.3.3'te (fiziksel cihaz) test ediyorum ve çökmüyor! Harika çalışıyor. Sadece tahmininizin iyi olduğundan emin olun!
2016

1
@JordanSmith Bu iOS 10'da çalışmıyor. Örnek bir demo var mı? Koleksiyon görünümü hücre yüksekliğini içeriğine göre yapmak için pek çok şey denedim ama hiçbir şey yapmadım.
İOS

6

Bunu iOS 9'da birkaç satır kodla yapmanın basit bir yolu - örneğin yatay yol (yüksekliğini Koleksiyon Görünümü yüksekliğine sabitleyerek):

estimatedItemSizeKendi boyutlandırma hücresini etkinleştirmek için Koleksiyon Görünümü Akış Düzeninizi başlatın :

self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.estimatedItemSize = CGSizeMake(1, 1);

Koleksiyon Görünümü Düzen Temsilcisini uygulayın (çoğu zaman Görünüm Kontrolörünüzde) collectionView:layout:sizeForItemAtIndexPath:,. Buradaki amaç, sabit yüksekliği (veya genişliği) Koleksiyon Görünümü boyutuna ayarlamaktır. 10 değeri herhangi bir şey olabilir, ancak bunu kısıtlamaları bozmayan bir değere ayarlamalısınız:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(10, CGRectGetHeight(collectionView.bounds));
}

Özel hücre preferredLayoutAttributesFittingAttributes:yönteminizi geçersiz kılın , bu kısım aslında Otomatik Düzen kısıtlamalarınıza ve ayarladığınız yüksekliğe göre dinamik hücre genişliğinizi hesaplar:

- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy];
    float desiredWidth = [self.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].width;
    CGRect frame = attributes.frame;
    frame.size.width = desiredWidth;
    attributes.frame = frame;
    return attributes;
}

İOS9'da bu daha basit yöntemin, hücre çok satırlı bir satır içerdiğinde doğru çalışıp çalışmadığını biliyor musunuz? UILabelSatır kesme, hücrenin iç yüksekliğini etkiler mi? Bu, anlattığım tüm ters takla atmayı gerektiren yaygın bir durumdur. Cevabımdan beri iOS'un düzeltip düzeltmediğini merak ediyorum.
algal

2
@algal Ne yazık ki, cevap hayır.
jamesk

4

Genişliğinizi tercih edilen düzen özelliklerinde sabitlemeyi deneyin:

- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
    UICollectionViewLayoutAttributes *attributes = [[super preferredLayoutAttributesFittingAttributes:layoutAttributes] copy];
    CGSize newSize = [self systemLayoutSizeFittingSize:CGSizeMake(FIXED_WIDTH,layoutAttributes.size) withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
    CGRect newFrame = attr.frame;
    newFrame.size.height = size.height;
    attr.frame = newFrame;
    return attr;
}

Doğal olarak, mizanpajınızı aşağıdakileri yapmak için doğru şekilde kurduğunuzdan da emin olmak istersiniz:

UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionView.collectionViewLayout;
flowLayout.estimatedItemSize = CGSizeMake(FIXED_WIDTH, estimatedHeight)];

İşte sabit genişlikte hücreler kullanan ve dinamik yazıyı destekleyen, böylece sistem yazı tipi boyutu değiştikçe hücrelerin yüksekliği de güncellenen Github'a koyduğum bir şey .


Bu kod parçacığında systemLayoutSizeFittingSize: 'i çağırırsınız. Ayrıca, bir yerde PreferMaxLayoutWidth ayarlamadan da bunu çalıştırmayı başardınız mı? Tecrübelerime göre, preferMaxLayoutWidth'i ayarlamıyorsanız, örneğin sizeThatFits'i geçersiz kılarak, başka bir yerde tanımlanan otomatik düzen kısıtlamalarının mantığını yeniden üreten hesaplamalarla ek manuel düzen yapmanız gerekir.
algal

@algal preferMaxLayoutWidth, UILabel üzerindeki bir özellik mi? Bunun nasıl alakalı olduğundan tam olarak emin değil misiniz?
Daniel Galasko

Hata! İyi nokta, değil! Bunu asla bir UITextView ile halletmedim, bu yüzden API'lerinin orada farklı olduğunu fark etmedim. UITextView.systemLayoutSizeFittingSize, intrinsicContentSize içermediğinden çerçevesine saygı duyuyor gibi görünüyor. Ancak UILabel.systemLayoutSizeFittingSize, intrinsicContentSize özelliğine sahip olduğundan çerçeveyi yok sayar, bu nedenle, sarmalanmış yüksekliğini AL'ye göstermek için intrinsicContentSize almak için PreferMaxLayoutWidth gereklidir. Yine de UITextView iki geçişe veya manuel düzene ihtiyaç duyacak gibi görünüyor, ancak bunları tam olarak anladığımı sanmıyorum.
algal

@algal Katılıyorum, ayrıca UILabel'i kullanırken bazı tüylü sorunlar yaşadım. Tercih edilen genişliği ayarları sorunu çözer, ancak bu genişliğin gözetimle ölçeklenmesi gerektiğinden daha dinamik bir yaklaşıma sahip olmak güzel olurdu. Projelerimin çoğu tercih edilen mülkü kullanmıyor, genellikle bunu hızlı bir çözüm olarak kullanıyorum çünkü her zaman daha derin bir sorun var
Daniel Galasko

0

EVET, programlı olarak otomatik mizanpaj kullanılarak ve film şeridi veya xib'de kısıtlamalar ayarlayarak yapılabilir. Genişlik boyutunun sabit kalması ve yüksekliği değerinden büyük veya ona eşit olması için sınırlama eklemeniz gerekir.
http://www.thinkandbuild.it/learn-to-love-auto-layout-programmatically/

http://www.cocoanetics.com/2013/08/variable-sized-items-in-uicollectionview/
Umarım bu yardımcı olur ve sorununuzu çözer.


3
Bu, mutlak bir genişlik değeri için çalışmalıdır, ancak hücrenin her zaman koleksiyon görünümünün tam genişliğinde olmasını istemeniz durumunda çalışmayacaktır.
Michael Waterfall

@MichaelWaterfall AutoLayout kullanarak tam genişlikte çalıştırmayı başardım. Hücrenin içindeki içerik görünümüme bir genişlik sınırlaması ekledim. Sonra içinde cellForItemAtIndexPathkısıtlamayı güncelleyin: cell.constraintItemWidth.constant = UIScreen.main.bounds.width. Uygulamam yalnızca portaittir. Muhtemelen reloadDatabir yönelim değişikliğinden sonra kısıtlamayı güncellemek istersiniz .
Flitskikker
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.