2016-03-29 17 views
21

ArkaplanSwift'de özel görünümün intrinsik içerik boyutu nasıl ayarlanır?

geleneksel Moğol komut ile kullanmak için dikey bir etiket yapıyorum. Sadece UILabel'u döndürmeden önce bazı performans sorunları ve bununla ilgili başka sorunlar vardı. Şimdi sıfırdan bir etiket yapmak için çalışıyorum. Bununla birlikte, yüksekliği ayarlandığında (dize uzunluğuna bağlı olarak) otomatik düzeni belirtmek için dikey etikete ihtiyacım var.

Ben

okudum Ne Intrinsic Content Size ve Views with Intrinsic Content Size belgelerini okuyun. Bununla birlikte, bunların nasıl kullanılacağı, özel bir görünümde nasıl tanımlanacağı değil. "Özel bir görünüm için ios içsel içerik boyutu" aranıyor

sadece yığın taşması bana

verir. Bu özel soru içsel içerik boyutuna bile ihtiyaç duymuyordu çünkü görüşlerinin sadece standart görüşlerin bir araya gelmesiydi. Ne çalışıyorum aşağıda benim cevaptır ne

çalışıyorum

. Bu Q & A çiftini ekliyorum, böylece diğer insanları benim kullandığım arama anahtar kelimelerle aldığım yanıtı bulmak kadar uzun sürmeyecek.

cevap

53

Özel görünümün içsel içerik boyutunu ayarlamak, otomatik düzeni, bu görünümün ne kadar büyük olacağını bilmek ister. Bunu ayarlamak için intrinsicContentSize'u geçersiz kılmanız gerekir.

override var intrinsicContentSize: CGSize { 
    return CGSize(width: x, height: y) 
} 

Daha sonra, özel görünümün içsel içerik boyutu değişir ve çerçeve

invalidateIntrinsicContentSize() 

güncellenmelidir zaman diyoruz.

Notlar

+1

Swift 3: http://stackoverflow.com/a/38881383/1161948 – ThisClark

3

, bir "içsel yükseklikle bakış" nin

örnek ... Eğer eden incelenebilir

olarak ayarlayabilirsiniz

@IBDesignable 
class HView: UIView { 
    @IBInspectable var height: CGFloat = 100.0 
    override var intrinsicContentSize: CGSize { 
     return CGSize(width: 99, height: height) 
     // if using in, say, a vertical stack view, the width is ignored 
    } 
} 

enter image description here

enter image description here

bir iç yüksekliğe sahip olduğundan, (örneğin) hemen kodundaki bir yığın görünümünde sokulabilir: bu içsel bir yüksekliğe sahip, normal bir görünüm ise

stack?.insertArrangedSubview(HView(), at: 3) 

aksine, sahip olurdu bir yükseklik çapa eklemek veya çöküyordu:

let v:UIView = HView() 
v.heightAnchor.constraint(equalToConstant: 100).isActive = true 
stack?.insertArrangedSubview(v, at: 3) 

bir yığın görünümünün özel durumda, sadece bu içsel yükseklik işleri ayarı (dikey yığın görünümü, yükseklik için) yaklaşık bir tek çapa endişelenmenize gerek kusursuzca; asıl yükseklik gerçekten, çünkü yükseklik çapasının, gerekirse otomatik olarak ayarlanacağı anlamına gelir. (Bir alt görüntünün tüm normal durumlarında, diğer birçok çapa gerektiğinin hatırlanması gerekir.)