微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NSStackView,当其中一个子视图被隐藏时填充视图

如何解决NSStackView,当其中一个子视图被隐藏时填充视图

我有一个具有这种行为的垂直 nsstackview。它有两个子视图,其中一个位于堆栈视图的顶部,具有固定的高度。 然后,还有另一个视图将覆盖视图中的剩余空间。类似于下图。我当前的代码已经显示如下视图:

enter image description here

我想要一种行为,当我隐藏顶视图或 ViewA 时,ViewB 会占据整个堆栈视图的高度。喜欢这张图:

enter image description here

我以编程方式执行此操作,但是当我将 ViewA 设置为隐藏时,ViewB 不会占用整个可用空间。将 ViewA 空间留在那里。

我当前的代码已经像第一张图片一样显示了 UI,它是:

@interface CutsomStackView : nsstackview
@property (nonatomic) NSView *viewA;
@property (nonatomic) NSView *viewB;

- (id)initWithFrame:(NSRect)frame views:(NSArray<NSView *> *)views;
@end

@implementation CutsomStackView

- (id)initWithFrame:(NSRect)frame views:(NSArray<NSView *> *)views
{
    if (!(self = [super initWithFrame:frame]))
        return nil;

    _viewA = views[0];
    _viewB = views[1];

    self.detachesHiddenViews = YES;
    self.orientation = NSUserInterfaceLayoutOrientationVertical;
    self.spacing = 0;
    self.distribution = nsstackviewdistributionFill;

    CGFloat viewAHeight = NSHeight(_viewA.frame);

    [self addSubview:_viewA];
    [self addSubview:_viewB];

    _viewA.translatesAutoresizingMaskIntoConstraints = NO;
    _viewB.translatesAutoresizingMaskIntoConstraints = NO;

    NSDictionary *views = @{
        _viewA,_viewB
    };

    NSDictionary *metrics = @{
        @"viewAHeight": @(viewAHeight)
    };

    [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:UNLOCALIZED_STRING("V:|[_viewA(viewAHeight)][_viewB]|") options:NSLayoutFormatAlignAllLeading | NSLayoutFormatAlignAllTrailing metrics:metrics views:views]];
    [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:UNLOCALIZED_STRING("H:|[_viewA]|") options:0 metrics:nil views:views]];

    return self;
}

@end

当 ViewA 隐藏时,我不确定我需要添加什么来允许 ViewB 的大小增长。 另外,在我隐藏viewB之后,我调用layoutSubtreeIfNeeded方法

解决方法

最终问题在于三个不同的方面:

  1. 使用 Dim t(1) As Integer t(0) = (1 / (1 + (10 ^ (1000 - 1000) / 400))) Console.WriteLine(t(0)) Console.ReadLine() 而不是 -[NSStackView addSubView:]
  2. 使用约束来正确组织视图。
  3. 视图的拥抱优先级。

固定代码为:

-[NSStackView addArrangedSubview:]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。