2014-06-13 45 views
6

NSView ve alt görünümü NSTextView'den oluşan basit bir düzenim var. NSTextView, programlı olarak birden çok satırın bulunduğu bazı metinlerle doldurulur. Otomatik yerleşimi (her şey programlı olarak yapılır) kullanarak her şeyi birbirine bağlarım. Ancak, her şey görüntülendiğinde NSTextView kesilir, sadece bir satır gösterilir.NSTextView otomatik düzende düzgün şekilde yeniden boyutlandırılıyor

web arama yaptıktan sonra, ben bulabildiğim en iyi cevap oldu:

Using Autolayout with expanding NSTextViews

Ancak gerçekten benim kullanım değildir herşey gösterildikten sonra el NSTextView metni değiştirirseniz bu sadece çalışır (vaka). Görünümler yeniden ayarlanır ve tüm NSTextView görüntülenir.

NSViewController'ın NSTextView'da invalidateIntrinsicContentSize'u arayabilmem için alt görünümleri belirlerken ne yapacağını anlamaya çalışıyorum. UIViewController içinde viewDidLayoutSubviews eşdeğeri.

Şimdiye kadar çalıştığım hiçbir şey işe yaramadı. Metnimin

ile NSTextView doldurduktan sonra bunu başarmak için daha iyi bir yolu var mı loadView

  • sonunda

    • : Ben NSTextView için invalidateIntrinsicContentSize arayarak teşebbüs?

      1. özel NSView alt sınıf geçersiz kılma olarak invalidateIntrinsicContentSize

      Ayrıca açıklıyor bu bağlantıyı kontrol çağıran layout yöntemi NSTextView

    • içeren NSView alt sınıf oluşturun:

  • cevap

    6

    fazla araştırma sonrasında cevabını buldu otomatik düzen ve iç içerik boyutunun inceliklerini (diğer pek çok şey arasında):

    http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html

    örnek kod: MyTextView arasında

    @interface MyView : NSView 
        @property MyTextView *textView; 
    @end 
    
    @implementation MyView 
    
    // init & create content & set constraints 
    
    -(void) layout { 
        [super layout]; 
        [self.textView invalidateIntrinsicContentSize]; 
    } 
    
    @end 
    

    Uygulama:

    @implementation MyTextView 
    
    - (NSSize) intrinsicContentSize { 
        NSTextContainer* textContainer = [self textContainer]; 
        NSLayoutManager* layoutManager = [self layoutManager]; 
        [layoutManager ensureLayoutForTextContainer: textContainer]; 
        return [layoutManager usedRectForTextContainer: textContainer].size; 
    } 
    
    - (void) didChangeText { 
        [super didChangeText]; 
        [self invalidateIntrinsicContentSize]; 
    } 
    
    @end 
    
    İlgili konular