2015-04-14 10 views
6

Mam dziwny problem z metodą sizeToFit na NSTextField.NSTextField sizeToFit lub aktualizacja ramki przesunięcie tekstu w lewo

Mam NSView, gdzie tworzę CALayer i NSTextField. Używam metody sizeToFit, aby zmienić rozmiar mojej CALayer zgodnie z wartością pola. Działa dobrze, ale gdy wstawiam spację, tekst przesuwa się po lewej stronie w ramce pola (patrz zdjęcie poniżej).

Obie ramki warstwy i pola tekstowego są dobrze ułożone (pochodzenie nie jest w ruchu).

Każda wskazówka na ten temat byłaby bardzo cenna.

text shift

EDIT aktualizacja Rama ma ten sam problem, nawet gdy nie jest używany sizeToFit.

Czasami przesuwa się podczas wstawiania spacji lub czasami wraca do żądanej pozycji podczas wstawiania spacji.

Warstwa położona poniżej nie przesuwa się od początku.

EDIT Wygląda na to, że kontener NSTextField potrzebuje miejsca na wyświetlenie. To, co odkryłem, to że potrzebuje naprawdę dużo miejsca.

Nie możemy uzyskać dostępu do kontenera NSTextField, więc dodam dużą wartość do szerokości ciągu (w zależności od rozmiaru czcionki) przed wywołaniem aktualizacji ramki lub [self sizeThatFits:stringSize]; i [self sizeToFit];.

+0

czy używasz autolayout? – Astoria

+0

Tak, czy inaczej byłoby bez autolayout? Mam na myśli: to zachowanie jest z nim powiązane? –

Odpowiedz

1

Myślę, że nie ma potrzeby w -sizeToFit -metoda. Jest on wywoływany automatycznie po wykonaniu układu. Jeśli potrzebujesz dopasować rozmiar swojej instancji NSTextField, podklasuj ją i przesuń -intrinsicContentSize -model.

Użyłem tego podejścia z maską "fade out" na końcu pola tekstowego. Używając autouzupełniania i nieodłącznego rozmiaru zawartości, moje pola tekstowe były zawsze z tą maską, nawet jeśli w widoku nadrzędnym było wystarczająco dużo miejsca na układ.

- (CGSize)intrinsicContentSize 
    { 
    CGSize size=[super intrinsicContentSize]; 
    // adjust size somehow (or may be not) 
    return(size); 
    } 

każdym razem trzeba "Update" rozmiar pola tekstowego (podczas pisania?), Zadzwoń -invalidateIntrinsicContentSize.

Powiązane problemy