首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自动布局功能的扩展和缩小表视图

问具有自动布局功能的扩展和缩小表视图
EN

Stack Overflow用户
提问于 2014-07-07 18:08:52
回答 1查看 485关注 0票数 2

我正在尝试构建一个包含多个垂直堆叠的表视图的视图。我不想为每个表视图分配一个固定的高度,而是希望这些表随其内容一起增长。然后将堆栈嵌套在滚动视图中。

使用自动布局,我设法让嵌套的滚动视图与它们的表视图一起增长。但是,当我从表视图中删除行时,我无法使这些行缩小。自动布局似乎假定视图的最佳大小是其当前大小。在我的设置中,最好的尺寸将是最小的试穿尺寸。

界面生成器中的设置:

代码语言:javascript
复制
- Scrollview
-- Clipview
--- Container
---- Nested Scrollview
------ Clipview
------- Tableview
---- Nested Scrollview
------ Clipview
------- Tableview

在代码中,我添加了约束来将表视图的前导、尾部、顶部和底部固定到它们的直接父剪辑视图。

测试项目( https://dl.dropboxusercontent.com/u/2381634/SO/AdjacentTableViews%20Auto-Layout.zip )具有在两个表视图中添加和删除行的按钮。

添加行将增长表视图、剪辑视图、…。外部的scull视图可以按预期滚动。

删除行无法缩小嵌套的滚动视图。

如何让自动布局考虑到最小试衣尺寸,拥抱内容,…?

EN

回答 1

Stack Overflow用户

发布于 2014-09-01 22:58:58

我最终根据表视图中的行数对NSScrollView和NSTableView进行了子类化,以计算intrinsicContentSize:

代码语言:javascript
复制
@implementation HHNestedScrollView

- (NSSize)intrinsicContentSize
{
    NSView  *documentView   = [self documentView];
    NSSize  fSize           = [documentView intrinsicContentSize];

    if (fSize.height >= 0) {
        if (self.borderType != NSNoBorder) {
            fSize.height += 2;
        }
    }

    return fSize;
}

- (void)scrollWheel:(NSEvent *)theEvent
{
    [[self nextResponder] scrollWheel:theEvent];

    [self setNeedsLayout:YES];
}

@end


@implementation HHNestedTableView 

- (NSSize)intrinsicContentSize
{
    NSSize      fSize   = [super intrinsicContentSize];

    NSInteger   nr      = [self numberOfRows];
    CGFloat     rh      = [self rowHeight];
    CGFloat     ih      = [self intercellSpacing].height;

    fSize.height = rh * nr + ih * MAX(nr, 1);

    return fSize;
}

@end

只要表视图中的行数发生变化,我的视图控制器就会使intrinsicContentSize失效:

代码语言:javascript
复制
[[self.tableView enclosingScrollView] invalidateIntrinsicContentSize];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24608078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档