Bir "sağ" NSTextFieldCell dikey çizmek için yolu ortalanmış metin var mı?
Birkaç METİN sütun NSTableView
var. Varsayılan olarak, dataCell
bu sütunlar örneği Apple'ın NSTextFieldCell
sınıf, her türlü güzel şeyler, ama çizer metin hizalanmış üst hücre ve istediğim metin için dikey olarak ortalanmış bir hücredir.
Dikey metin merkezi için kullanılan NSTextFieldCell
dahili bir bayrak var ve güzel çalışıyor. Dahili bir bayrak olduğundan, ancak, onun kullanın Apple tarafından onaylanmış değildir ve sadece gelecekteki bir sürümde uyarı olmadan kaybolabilir. Şu anda basit ve etkili olduğu için bu iç bayrak kullanıyorum. Apple belli ki biraz zaman özelliği uygulamaya geçirdi, yeniden uygulamaya bu fikri sevmiyorum.
Yani; benim sorum şu:Tam olarak Apple'ın NStextFieldCell gibi davranır, ama üst hizalı yerine dikey olarak ortalanmış metin çeken bir şey uygulamak için doğru yolu nedir?
Bu arada, işte benim geçerli "": . çözüm
@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end
@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
@try { _cFlags.vCentered = centerVertical ? 1 : 0; }
@catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
Aşağıdaki gibi kullanılır
[[myTableColumn dataCell] setVerticalCentering:YES];
CEVAP
Diğer cevapları birden fazla satır için işe yaramadı. Bu nedenle ben başlangıçta cFlags.vCentered
belgelenmemiş bir özelliği kullanmaya devam etti, ama benim app Store'dan reddedilmesine neden oldu. Birden fazla satır, sözcük kaydırma ve kesilmiş son bir satır için çalışan Matt Bell çözüm değiştirilmiş bir sürümü ile sona erdi:
-(void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSAttributedString *attrString = self.attributedStringValue;
/* if your values can be attributed strings, make them white when selected */
if (self.isHighlighted && self.backgroundStyle==NSBackgroundStyleDark) {
NSMutableAttributedString *whiteString = attrString.mutableCopy;
[whiteString addAttribute: NSForegroundColorAttributeName
value: [NSColor whiteColor]
range: NSMakeRange(0, whiteString.length) ];
attrString = whiteString;
}
[attrString drawWithRect: [self titleRectForBounds:cellFrame]
options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin];
}
- (NSRect)titleRectForBounds:(NSRect)theRect {
/* get the standard text content rectangle */
NSRect titleFrame = [super titleRectForBounds:theRect];
/* find out how big the rendered text will be */
NSAttributedString *attrString = self.attributedStringValue;
NSRect textRect = [attrString boundingRectWithSize: titleFrame.size
options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin ];
/* If the height of the rendered text is less then the available height,
* we modify the titleRect to center the text vertically */
if (textRect.size.height < titleFrame.size.height) {
titleFrame.origin.y = theRect.origin.y (theRect.size.height - textRect.size.height) / 2.0;
titleFrame.size.height = textRect.size.height;
}
return titleFrame;
}
(Bu kodu ARC varsayar; Ekle attrString sonra bir autorelease.eğer manuel bellek yönetimi kullanırsanız mutableCopy)
İlk metin ile bir Android Spinner yapm...
İnput type=&; tarih" biçimini " d...
&Quot bağlayın;ayrıcalıklı" port ...
jQuery: kısıtlamak " için en iyi y...
Hata mesajı çözmek için nasıl: "g...