Anonymous
Сжатая ширина и высота NSButton Appkit.
Сообщение
Anonymous » 08 ноя 2025, 21:39
Я пытаюсь создать кнопки для своего плеера, однако получаю сжатые кнопки, хотя я назначил одинаковую ширину и высоту в наборе приложений NSButtons.
Это окончательный результат, который я получаю: -
мое изображение
Код: Выделить всё
private func setupControls() {
undoButton = createButton(imageName: "arrow.uturn.backward", target: self, action: #selector(undoAction))
redoButton = createButton(imageName: "arrow.uturn.forward", target: self, action: #selector(redoAction))
deleteButton = createButton(imageName: "trash", target: self, action: #selector(deleteAction))
rewindButton = createButton(imageName: "backward.end", target: self, action: #selector(rewindAction))
playPauseButton = createButton(imageName: "play", target: self, action: #selector(playPauseAction))
fastForwardButton = createButton(imageName: "forward.end", target: self, action: #selector(fastForwardAction))
fullscreenButton = createButton(imageName: "arrow.up.left.and.arrow.down.right", target: self, action: #selector(fullscreenAction))
let leftStack = NSStackView(views: [undoButton, redoButton, deleteButton])
leftStack.spacing = 9
let centerStack = NSStackView(views: [rewindButton, playPauseButton, fastForwardButton])
centerStack.spacing = 9
addSubview(leftStack)
addSubview(centerStack)
addSubview(fullscreenButton)
leftStack.translatesAutoresizingMaskIntoConstraints = false
centerStack.translatesAutoresizingMaskIntoConstraints = false
fullscreenButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
leftStack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20),
leftStack.topAnchor.constraint(equalTo: topAnchor, constant: 20),
centerStack.centerXAnchor.constraint(equalTo: centerXAnchor),
centerStack.topAnchor.constraint(equalTo: topAnchor, constant: 20),
fullscreenButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20),
fullscreenButton.topAnchor.constraint(equalTo: topAnchor, constant: 20)
])
}
private func createButton(imageName: String, target: Any?, action: Selector?) -> NSButton {
let button = NSButton(image: NSImage(systemSymbolName: imageName, accessibilityDescription: nil)!, target: target, action: action)
button.bezelStyle = .texturedRounded
button.isBordered = false
button.imageScaling = .scaleProportionallyDown
button.contentTintColor = .white
// Set button size to 30x30
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
button.widthAnchor.constraint(equalToConstant: 30),
button.heightAnchor.constraint(equalToConstant: 30)
])
let config = NSImage.SymbolConfiguration(pointSize: 8, weight: .regular)
if let configuredImage = NSImage(systemSymbolName: imageName, accessibilityDescription: nil)?.withSymbolConfiguration(config) {
button.image = configuredImage
}
button.wantsLayer = true
button.layer?.cornerRadius = 15 // Half of 30 for perfect circle
button.layer?.borderWidth = 1
button.layer?.borderColor = NSColor(red: 0x88/255.0, green: 0x88/255.0, blue: 0x88/255.0, alpha: 0.5).cgColor
return button
}
Я попробовал поместить окончательный результат под изображением фигмы, и вот результат:-
сравнить
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ton-appkit
1762627190
Anonymous
Я пытаюсь создать кнопки для своего плеера, однако получаю сжатые кнопки, хотя я назначил одинаковую ширину и высоту в наборе приложений NSButtons. Это окончательный результат, который я получаю: - мое изображение [code]private func setupControls() { undoButton = createButton(imageName: "arrow.uturn.backward", target: self, action: #selector(undoAction)) redoButton = createButton(imageName: "arrow.uturn.forward", target: self, action: #selector(redoAction)) deleteButton = createButton(imageName: "trash", target: self, action: #selector(deleteAction)) rewindButton = createButton(imageName: "backward.end", target: self, action: #selector(rewindAction)) playPauseButton = createButton(imageName: "play", target: self, action: #selector(playPauseAction)) fastForwardButton = createButton(imageName: "forward.end", target: self, action: #selector(fastForwardAction)) fullscreenButton = createButton(imageName: "arrow.up.left.and.arrow.down.right", target: self, action: #selector(fullscreenAction)) let leftStack = NSStackView(views: [undoButton, redoButton, deleteButton]) leftStack.spacing = 9 let centerStack = NSStackView(views: [rewindButton, playPauseButton, fastForwardButton]) centerStack.spacing = 9 addSubview(leftStack) addSubview(centerStack) addSubview(fullscreenButton) leftStack.translatesAutoresizingMaskIntoConstraints = false centerStack.translatesAutoresizingMaskIntoConstraints = false fullscreenButton.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ leftStack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20), leftStack.topAnchor.constraint(equalTo: topAnchor, constant: 20), centerStack.centerXAnchor.constraint(equalTo: centerXAnchor), centerStack.topAnchor.constraint(equalTo: topAnchor, constant: 20), fullscreenButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20), fullscreenButton.topAnchor.constraint(equalTo: topAnchor, constant: 20) ]) } private func createButton(imageName: String, target: Any?, action: Selector?) -> NSButton { let button = NSButton(image: NSImage(systemSymbolName: imageName, accessibilityDescription: nil)!, target: target, action: action) button.bezelStyle = .texturedRounded button.isBordered = false button.imageScaling = .scaleProportionallyDown button.contentTintColor = .white // Set button size to 30x30 button.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ button.widthAnchor.constraint(equalToConstant: 30), button.heightAnchor.constraint(equalToConstant: 30) ]) let config = NSImage.SymbolConfiguration(pointSize: 8, weight: .regular) if let configuredImage = NSImage(systemSymbolName: imageName, accessibilityDescription: nil)?.withSymbolConfiguration(config) { button.image = configuredImage } button.wantsLayer = true button.layer?.cornerRadius = 15 // Half of 30 for perfect circle button.layer?.borderWidth = 1 button.layer?.borderColor = NSColor(red: 0x88/255.0, green: 0x88/255.0, blue: 0x88/255.0, alpha: 0.5).cgColor return button } [/code] Я попробовал поместить окончательный результат под изображением фигмы, и вот результат:- сравнить Подробнее здесь: [url]https://stackoverflow.com/questions/79814381/squeezed-width-and-height-of-nsbutton-appkit[/url]