使用drawRect,Autolayout约束不适用于NSView组合:

时间:2012-10-23 11:04:38

标签: cocoa nsview drawrect autolayout

我正在尝试将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:来组成其用户界面组件。

我想知道是否仍然可以使用Autolayout约束来定位用户界面组件。目前没有任何组件出现。我觉得它不起作用,因为我画了那些“子视图”。

1 个答案:

答案 0 :(得分:2)

我设法通过在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);
}