简短回答:Dock 并没有真的改变大小。macOS 存储的是同一个
tilesize 值,只是在像素密度不同的显示器上把它绘制出来,所以同一个数值
在一块屏幕上看起来比另一块大。
锁定大小能阻止数值本身被改动,这才是你真正能
控制的部分:defaults write com.apple.dock size-immutable -bool true; killall Dock
Dock 对整台 Mac 只有一个大小设置,而不是每台显示器各一个。tilesize 是一个以点
为单位的数字,而一个点并不对应固定数量的像素。在 Retina 笔记本屏幕上,一个 48 点的图标
所用的像素数量大约是 1080p 显示器上的两倍,所以 Dock 在一块屏幕上看起来正常,在另一块上却不对,
而存储的值却从未改变过。
这就是为什么插入或拔出显示器的那一刻,Dock 看起来像是自己改变了大小: 数值本身没变,只是它底下的画布变了。
还有第二个独立的问题,也正是值得锁定的那个。当 Dock 落到一块尺寸不同的 屏幕上时,它的最大宽度也会随之改变。一个在 27 英寸显示器上排列宽松的 Dock, 放到笔记本屏幕上就放不下,于是 macOS 会缩小图标以适应空间。回到大显示器上时, 它们不一定会回到原来的样子。
每次在错误的屏幕上不小心碰到分隔线,都会写入一个新的
tilesize,而这个值正是会跟着你回到原屏幕的那个值。
在你最常用的显示器上选择大小,然后记下这个值,以便日后能恢复:
defaults read com.apple.dock tilesize
把这个数字记下来。它是一个整数,通常在 16 到 128 之间。
defaults write com.apple.dock size-immutable -bool true
killall Dock
“系统设置”里的大小滑块会停止响应,分隔线也不再能调整大小。Dock 在不同像素密度
的显示器之间仍会在视觉上按比例缩放,因为那是 macOS 在绘制它,但存储的数值
不会再漂移。要解除它,把 true 换成 false。
如果 Dock 在显示器之间跳动才是真正令人困扰的地方,大小只是问题的一半。参见 如何将 Dock 固定在单块屏幕上,其中说明了 macOS 允许和不允许你固定的内容。
tilesize 设为高于 128 的值。Dock 会从命令行接受这个值,
然后在下次启动时把它限制到上限。这不是一个隐藏的更大尺寸。defaults write com.apple.dock size-immutable -bool false
defaults write com.apple.dock tilesize -int 48
killall Dock
使用你在第一步记下的那个数值。如果你没有记下过,
defaults delete com.apple.dock tilesize 会把 Dock 恢复到 macOS 的默认值,而不是靠猜测。
不会。
size-immutable 只固定 tilesize。放大功能和
largesize 仍然可以调整,除非你单独锁定它们,而在放大功能开启的情况下锁定大小,
是导致 Dock 看起来仍在变化的常见原因。
不会。这项锁定 阻止的是数值被写入;它并不能阻止 macOS 按显示器所需的任意缩放比例绘制 Dock。 投屏演示的效果和以前完全一样。
所有重要的版本都支持。
size-immutable 已经生效超过十五年,在 macOS 26 上依然有效。设置面板
移到了“系统设置”›“桌面与 Dock”,变灰的滑块就在那里。
如果你不想记一堆命令,Still Dock 把同样的四项设置 变成了开关,而且会记住你锁定之前的 Dock 样子。大小锁定是免费的。