我试图将Autolayout约束应用于自NSView
继承的自定义按钮。该按钮相当复杂,例如可以用作单选按钮。用户界面由drawRect:
组成,您可以从下面的代码摘录中猜测。
@interface CustomButton : NSView
...
- (void)drawRect:(NSRect)dirtyRect {
// ...
if (self.hasImage) {
// ...
if (self.hasTitle) {
// ...
[image drawInRect:imgRect
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:fraction
alignment:Alignment_LEFT];
} else {
[image drawInRect:imgRect
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:fraction
alignment:Alignment_CENTER];
}
}
if (self.hasTitle) {
// ...
[self.textRenderer drawText:m_title
inRect:textRect
withState:state
controlView:self];
}
}
我已成功配置了一个自NSView派生的自定义文本字段。区别在于文本字段使用
addSubView:
组成其用户界面组件。我想知道是否仍然可以使用“自动布局”约束来定位用户界面组件。目前没有组件出现。我感觉它不起作用,因为我绘制了这些“子视图”。
最佳答案
我设法通过在intrinsicContentSize
中实现CustomButton
来解决问题。
#pragma mark - NSConstraintBasedLayoutFittingSize
/**
Returns a suitable size for the receiver.
This settings may not apply if a layout constraint
defines minimum values for the width or height of the element.
@returns A size for the receiver.
*/
- (NSSize)intrinsicContentSize {
// Calculation of width and height of the rendered text.
return NSMakeSize(width, height);
}
关于cocoa - 自动布局约束对使用drawRect的NSView合成无效:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13029052/