我试图在我实现的聊天历史视图中实现平滑滚动,但是如果我追加的内容足够大,则平滑滚动只会滚动几行.
我的第一个猜测是视图没有重绘自己..不是这样,即使用-display强制立即绘图它仍然会破坏.
- (void)scrollAnimated:(BOOL)animated
{
if( animated )
{
NSClipView *clipView = [[_chatHistoryView enclosingScrollView] contentView];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.100f];
NSPoint constrainedPoint = [clipView constrainScrollPoint:NSMakePoint(0, CGFLOAT_MAX)];
[[clipView animator] setBoundsOrigin:constrainedPoint];
[NSAnimationContext endGrouping];
}
else
{
NSRange range;
range.location = [[_chatHistoryView textStorage] length];
range.length = 1;
[_chatHistoryView scrollRangeToVisible:range];
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在IB中,可以通过选中"调整大小"复选框来轻松完成.我的问题是我希望我的主要NSWindow不能调整大小,直到点击一个按钮,然后我希望它可以调整大小.
我在互联网上搜索但找不到任何东西?窗口不能调整大小或不能以编程方式调整大小吗?
在此先感谢大家!
背景:
我有一个普通的基于文档的Cocoa Mac OS X应用程序,它使用NSTextView富文本输入.用户可以编辑文本的字体系列,点大小和颜色NSTextView.
基础SDK:10.7
部署目标:10.6
题:
我想NSTextView在用户编辑文本时以编程方式(包括)实现整个UI的缩放.缩放框架NSTextView是没有问题的.但我不知道如何缩放视图中的可编辑文本,该文本可能在整个文本运行的不同子部分中包含多个不同的点大小.
如何将统一比例因子应用于显示的富文本NSTextView?
这应该与"富文本",使得用户的字体,颜色发挥很好,尤其是点大小(这可能是在文字的运行的不同位置有不同)将被保留,但按比例均匀/相对.
这可能是我的Base SDK和部署目标吗?是否可以使用较新的Base SDK或部署目标?
我已经成功地拖延了我的工作NSCollectionView,但是视觉外观和行为存在一些问题.主要问题是放置区/占位符的大小错误,即它小于集合视图的大小minItemSize.我已经搜索了文档,但看不出任何指定方法.
我的第二个问题是,我希望单元格图像在被拖动时实际移动,而不是仅仅具有半透明副本.
这是当前的行为:

这是我想要的行为(在Sketch中使用):

任何建议将不胜感激.如果任何代码有用,请告诉我 - 我不确定哪些部分与解决这个问题相关.谢谢!
我想在Mac OS X(Snow Leopard)上绘制桌面.具体来说,我想达到与运行相同的效果:
/System/Library/Frameworks/ScreenSaver.framework/Resources/
ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background
Run Code Online (Sandbox Code Playgroud)
(如果您不在计算机附近,则会显示您通常会看到桌面背景的屏幕保护程序.)
我知道如何创建一个没有边框的窗口(通过子类化NSWindow并重写initWithContentRect:styleMask:backing:defer:将窗口样式设置为NSBorderlessWindowMask)并且没有阴影(setHasShadow:NO.)
我知道我可以调用setLevel:kCGDesktopWindowLevel或kCGDesktopIconWindowLevel将我的窗口放在其他窗口下面(参见问题418791.)然而,这并不是我想要的,因为此级别的窗口仍然位于桌面图标的顶部.我想要在桌面背景之上,但在图标下面.
我的观点不透明.如果有一种技术可以破坏桌面背景,那就没问题.
我有一个自定义的NSView子类,需要处理一些键盘事件.在Objective-C中,我可能会这样处理它:
-(void)keyDown:(NSEvent *)event
{
unichar ch = [[event charactersIgnoringModifiers] characterAtIndex:0];
if (ch == NSUpArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
// Scroll to top
return;
}
else if (ch == NSDownArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
// Scroll to bottom
return;
}
switch (ch) {
case NSRightArrowFunctionKey:
// Select the current row
return;
case ' ':
// Scroll down one page
return;
default:
break;
}
[super keyDown:event];
}
Run Code Online (Sandbox Code Playgroud)
但是,在Swift中,characterAtIndex:返回a unichar,while NSUpArrowFunctionKey: Int和" ": String(或Character …
我正在OSX 10.10上开发Xcode 6.1.1.我正在为Mac应用程序试用故事板.我有一个使用new的NSTabViewController NSTabViewControllerTabStyleToolbar tabStyle,它被设置为窗口控制器的默认视图控制器.如何根据当前选定的视图控制器调整窗口大小?
是否可以完全在Interface Builder中完成?这是我的故事板的样子:

我有一个NSTextField我尝试在它的内容发生变化时根据某个标准自动调整大小.
有时,当开始输入内容时,开始向上(或向下)移动文本字段的可见部分,如下面的gif所示:

如果我在里面点击NSTextField,内容会再次出现在正确的位置.
发射了XCode中的可视化调试器,我看到的是,当这种情况发生,私人子视图NSTextField:_NSKeyboardFocusClipView拥有frame它的Y坐标有一个负数.
我不确定是什么原因引起的.
这是我的textField调整大小行为:
import Cocoa
struct TextFieldResizingBehavior {
let maxHeight: CGFloat = 100000.0
let maxWidthPadding: CGFloat = 10
let minWidth: CGFloat = 50
let maxWidth: CGFloat = 250
func resize(_ textField: NSTextField) {
let originalFrame = textField.frame
var textMaxWidth = textField.attributedStringValue.size().width
textMaxWidth = textMaxWidth > maxWidth ? maxWidth : textMaxWidth
textMaxWidth += maxWidthPadding
var constraintBounds: NSRect = textField.frame
constraintBounds.size.width = textMaxWidth
constraintBounds.size.height = maxHeight
var …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode开发基于Cocoa和AppKit、用Swift编写的MacOS 应用程序。
我在整个应用程序中使用IOBluetoothDevice对象,并且我希望能够显示设备的电池电量(如果可以访问)。
我希望在操作系统的蓝牙设置中可以看到电池电量的设备(见下图),也可以通过编程方式访问(例如,AirPods、Magic Keyboard 等)。但是,我在任何地方都找不到。
我也想过执行终端命令并找到这个线程,但它也不起作用。
谢谢
我有以下代码:(可以复制粘贴到新的 macOS 项目)
import Cocoa
import SwiftUI
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var statusBarItem: NSStatusItem!
func applicationDidFinishLaunching(_ aNotification: Notification) {
let statusBar = NSStatusBar.system
statusBarItem = statusBar.statusItem(
withLength: NSStatusItem.squareLength)
statusBarItem.button?.title = ""
// Setting action
statusBarItem.button?.action = #selector(self.statusBarButtonClicked(sender:))
statusBarItem.button?.sendAction(on: [.leftMouseUp])
let statusBarMenu = NSMenu(title: "Status Bar Menu")
statusBarMenu.addItem(
withTitle: "Order an apple",
action: #selector(AppDelegate.orderAnApple),
keyEquivalent: "")
statusBarMenu.addItem(
withTitle: "Cancel apple order",
action: #selector(AppDelegate.cancelAppleOrder),
keyEquivalent: "")
// Setting menu
statusBarItem.menu = statusBarMenu
}
@objc func statusBarButtonClicked(sender: NSStatusBarButton) {
let event …Run Code Online (Sandbox Code Playgroud) appkit ×10
cocoa ×9
macos ×6
swift ×4
objective-c ×2
nstextfield ×1
nstextview ×1
nswindow ×1
storyboard ×1
swiftui ×1