macos - 如何在 HSplitView 的子视图上设置最大宽度
问题描述
我HSplitView
在 macOS 上遇到了一些问题,我不确定这是错误还是我做错了什么。
我正在尝试创建一个带有[Sidebar | Main Content | Inspector]
布局的应用程序。这类似于 SF Symbols 应用程序,您可以在其中查看有关所选图标的更多信息。
我采取的方法是将Main Content
andInspector
视图放在HSplitView
. 在 a only 中拥有三个视图NavigationView
似乎使用了 Mail 模式[List | List | Detail]
,这不是我正在寻找的布局。
我看到的问题是,当我maxWidth
在Inspector
视图上设置 a 并将分隔线向左拖动时,Main Content
视图的大小会调整为小于可用空间。父HSplitView
级没有调整大小,所以我不确定我是使用了错误的修饰符还是在错误的地方使用了它们。
我在 github 上设置了一个基本的测试用例。如果你们都可以提供帮助或指导,那就太棒了。
观察到的行为
预期行为
import SwiftUI
struct A: View {
var body: some View {
VStack {
Spacer()
HStack {
Spacer()
Text("Pane A")
Spacer()
}
Spacer()
}
.frame(
minWidth: 200,
maxWidth: .infinity,
maxHeight: .infinity,
alignment: .leading
)
.background(Color.red)
.foregroundColor(.black)
.layoutPriority(1)
}
}
struct B: View {
var body: some View {
VStack {
Spacer()
HStack {
Spacer()
Text("Pane B")
Spacer()
}
Spacer()
}
.frame(
minWidth: 200,
idealWidth: 250,
maxWidth: 300,
maxHeight: .infinity
)
.background(Color.purple)
.foregroundColor(.black)
}
}
struct ContentView: View {
var body: some View {
HSplitView {
A()
B()
}
.frame(
minWidth: 0,
maxWidth: .infinity,
maxHeight: .infinity
)
.background(Color.blue)
}
}e
谢谢!
解决方案
我这几天也遇到同样的问题,一下子就解决了。
需要拖动View
HSplitView {
View1()
View2()
}
直观上,我们会设置 View1 的最大宽度,但是 SwiftUI 拖动时,View1 超过了最大宽度,就会显示莫名的错误
HSplitView {
View1()
.frame(maxWidth: 300)
View2()
}
解决 方法 设置 View2 的最小宽度,让 View 自动填充所有空间。不会有拖拽问题
HSplitView {
View1()
View2()
.frame(minWidth: 500)
}
推荐阅读
- python - Python 能否像 sed、awk 和(甚至)perl 一样用作命令行过滤器?
- python - 输入地标或如果不匹配 foo 字符串
- node.js - 如何为服务于用户的系统创建日志系统?
- matlab - 如何从 ODE45 接收更多输出
- javascript - 即使在文档末尾调用函数,Javascript getElementById 也找不到 div
- sql-server - 使用 Group By、Rank、Row_Number 删除重复项
- python - 如何创建正确垃圾收集的自定义生成器类
- javascript - 如何检测画布对象离开画布?
- selenium-chromedriver - Selenium chromedriver 不再打开命令提示符
- django - 没有时区的 Django 查询注释