首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用像mail.app这样的三个子视图配置NSSplitView

使用像mail.app这样的三个子视图配置NSSplitView
EN

Stack Overflow用户
提问于 2013-07-09 15:01:08
回答 2查看 1.1K关注 0票数 3

可以像在mail.app中一样,通过自动布局约束来配置3个子视图吗?我的意思是:当用户只调整窗口最右边的子视图的大小时,当用户拖动最左边和中间的子视图之间的分隔线时,只有左边和右边的子视图改变它的大小,当用户拖动中间和右边的子视图之间的分隔线时,只有这些子视图改变大小。如果可能的话,应该怎么做。我认为这项任务可以通过约束优先级来执行,但我对此感到困惑。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 21:46:00

我找到了一个不使用自动布局约束的解决方案。我正在使用Rubymotion,所以我的解决方案是用Ruby编写的,但它可以很容易地翻译成Objective-C。

首先,为了在用户拖动左子视图和中间子视图之间的分隔符时仅更改左子视图和右子视图的大小,我创建了两个嵌套的NSSplitView,第二个放在第一个的右侧。

问题中提到的最后一点,也就是说when the user drags the divider between the middle and the right subviews only these subviews change sizeNSSplitView的默认行为,所以这里不做任何事情。

最后,为了在用户调整窗口大小时仅让最右侧的子视图更改其大小,我实现了splitView:resizeSubviewsWithOldSize:委托方法:

代码语言:javascript
复制
def splitView(splitView, resizeSubviewsWithOldSize:oldSize)
  sv1 = splitView.subviews[0]
  sv2 = splitView.subviews[1]

  leftFrame = sv1.frame
  rightFrame = sv2.frame
  newFrame = splitView.frame

  leftFrame.size.height = newFrame.size.height
  rightFrame.size.height = newFrame.size.height

  leftFrame.origin = NSMakePoint(0,0)
  ## 1 is the NSSplitView divider width
  rightFrame.size.width = newFrame.size.width - leftFrame.size.width -  1
  rightFrame.origin.x = leftFrame.size.width + 1

  sv1.setFrame(leftFrame)
  sv2.setFrame(rightFrame)
end

就是这样!我花了一段时间才让它工作,所以我希望它能为其他人节省一些时间。

票数 1
EN

Stack Overflow用户

发布于 2013-09-19 21:52:14

使用自动布局,您可以设置NSSplitView中每个分隔符的保持优先级。您可以在代码中使用委托方法或在Xcode中的接口构建器中执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17541966

复制
相关文章

相似问题

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