2015-04-22 9 views
9

Kiedyś zauważyłem, że jedna z moich stron wyglądała brzydko. Przyciski na stronie wyglądały na totally different, w zależności od tego, czy zawierały jedną linię tekstu, czy dwie.Jak narysować obramowanie wokół przycisku NSTextextSquareBezelStyle

Po kilku kopaniu dowiedziałem się, że typowy przycisk używa NSRoundedBezelStyle, ale ma stałą wysokość. Tak więc, jeśli tekst ma być zawijany, Firefox (oraz Chrome i Safari) będzie miał wartość change the button to use NSShadowlessSquareBezelStyle, która może mieć zmienną wysokość. Chciałbym poprosić opiekunów tych przeglądarek, aby to zmienili i szukam najlepszej alternatywy.

Po znalezieniu already-filed bug i przeczytaniu, zasugerowałem, że może mogą zamiast tego użyć NSTexturedSquareBezelStyle. Okazuje się, że w Mavericks wygląda prawie tak samo jak przycisk NSRoundedBezelStyle. To samo dotyczy Yosemite, tyle że nie ma granicy. Zmiana setBordered nie daje żadnego efektu.

Moje pytanie w imieniu programistów przeglądarki na całym świecie: Czy można narysować przycisk NSTexturedSquareBezelStyle z ramką? Czy istnieje inny sposób obejścia tego, że wszyscy dostawcy przeglądarki przegapili?

Odpowiedz

3

przepisany Odpowiedź

nie widzę przycisk NSTexturedSquareBezelStyle wyświetlane obramowania w Yosemite:

NSTexturedSquareButonStyle button under Yosemite.

Jest to przycisk stock przeciągane z palety interfejs Builder. Zachęcam do opublikowania kodu, ponieważ najprawdopodobniej generujesz przycisk w kodzie. Oto mój własny kod do generowania tego samego przycisku:

NSButton * anotherButton = [[NSButton alloc] initWithFrame:NSMakeRect(10.0, 10.0, 100.0, 100.0)]; 
anotherButton.bezelStyle = NSTexturedSquareBezelStyle; 
anotherButton.title = @"Line 1\nLine 2"; 

Dowód:

Same button created with code.

Jeśli widzisz różne wyniki w Yosemite, trzeba pisać kodu. Przypuszczam, że możesz zainicjować swój przycisk za pomocą -init zamiast -initWithFrame:, co może spowodować wszelkiego rodzaju problemy z rysowaniem, ponieważ NSButton jest NSView, a zatem jego wyznaczonym inicjatorem jest -initWithFrame:. Tylko zgadnij.

+0

Występuje bardzo delikatna granica, ale nie na tyle, aby zapewnić kontrast na białym tle lub jasny kolor. W Mavericks ten przycisk wyglądał dokładnie tak, jak normalny przycisk, na co liczyłem. To po prostu frustrujące, że istnieje tak oczywiste ograniczenie, którego Apple nie uwzględnił w swoich API. – miken32

+0

Oprócz możliwości podklasowania komórki przycisku i oczywiście nadpisania jej rysunku. ;-) –

Powiązane problemy