사용자가 창의 아무 곳이나 클릭 할 수 NSTextView
있고 마우스 위치에 프로그래밍 방식으로 추가 되는 앱을 만들고 있습니다. 아래 코드로 작업했지만 NSTextView
화면 가장자리에 도달 할 때까지 가로로 확장 된 다음 세로로 커지기를 원합니다 . 현재 너비가 고정되어 있으며 더 많은 문자를 추가하면 텍스트보기가 예상대로 세로로 커지지 만 가로로도 커지기를 원합니다. 이것을 어떻게 달성 할 수 있습니까?
나는 설정 isHorizontallyResizable
하고 isVerticallyResizable
사실로 시도 했지만 이것은 작동하지 않습니다. 잠시 동안 조사한 후 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/TrackingSize.html을 발견 했지만 저에게도 효과가 없었습니다.
보기 ViewController
에 추가하려면 내 코드 NSTextView
:
private func addText(at point: NSPoint) {
let textView = MyTextView(frame: NSRect(origin: point, size: CGSize(width: 150.0, height: 40.0)))
view.addSubview(textView)
}
그리고 MyTextView
클래스는 다음과 같습니다.
class MyTextView: NSTextView {
override func viewWillDraw() {
isHorizontallyResizable = true
isVerticallyResizable = true
isRichText = false
}
}
나는 또한이 답변 https://stackoverflow.com/a/54228147/1385441을 보았지만 그것을 구현하는 방법을 완전히 모르겠습니다. 이 코드 스 니펫을 추가하고 다음 MyTextView
과 같이 사용했습니다.
override func didChangeText() {
frame.size = contentSize
}
그러나 나는 그것을 잘못 사용하고 있다고 생각합니다. Ergo, 어떤 도움을 주시면 감사하겠습니다.
추가하려는 때문에, 조금 의아해 해요 NSTextView
A와 NSView
의 일부인 NSViewController
다음 화면 폭에 대해 얘기하고. 이 부분이 Presentify-화면 주석 응용 프로그램의 일부입니까? 그렇다면 전체 화면 오버레이 창이 있고 여기 (또는 뷰 컨트롤러의보기)에서 크기를 가져올 수 있습니다.
view.bounds.size // view controller's view size
view.window?.frame.size // window size
그렇지 않고 화면 크기를 알아야하는 경우 NSWindow
& NSScreen
.
view.window?.screen?.frame.size // screen size
지정된 창 /보기 컨트롤러의보기 크기 조정 동작이 없습니다.
import Cocoa
class BorderedTextView: NSTextView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let path = NSBezierPath(rect: bounds)
NSColor.red.setStroke()
path.stroke()
}
}
class ViewController: NSViewController {
override func mouseUp(with event: NSEvent) {
// Convert point to the view coordinates
let point = view.convert(event.locationInWindow, from: nil)
// Initial size
let size = CGSize(width: 100, height: 25)
// Maximum text view width
let maxWidth = view.bounds.size.width - point.x // <----
let textView = BorderedTextView(frame: NSRect(origin: point, size: size))
textView.insertionPointColor = .orange
textView.drawsBackground = false
textView.textColor = .white
textView.isRichText = false
textView.allowsUndo = false
textView.font = NSFont.systemFont(ofSize: 20.0)
textView.isVerticallyResizable = true
textView.isHorizontallyResizable = true
textView.textContainer?.widthTracksTextView = false
textView.textContainer?.heightTracksTextView = false
textView.textContainer?.size.width = maxWidth // <----
textView.maxSize = NSSize(width: maxWidth, height: 10000) // <----
view.addSubview(textView)
view.window?.makeFirstResponder(textView)
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다