使用UIKit添加导航栏项目时,可以使用UIBarButtonItem.style设置其样式。这对于Done按钮(以粗体显示)很重要。
SwitftUI的navigationBarItems(leading:trailing:)采用bold
,但没有样式。您可以通过在视图中使用粗体按钮来破解外观相似的样式,但它不会适应将来的操作系统样式更改(例如,let currentPlayer = "X";
$(".cell").on('click', function() {
if (currentPlayer == "X" && $(this).hasClass("takenByX" || "takenByO")) { //checks to see if square has been played
(""); //does nothing
} else if (currentPlayer == "X") {
$(this).text("X").addClass("takenByX"); //change clicked square to x & adds class taken
playerChange();} //runs player change function
if(currentPlayer == "O" && $(this).hasClass("takenByX" || "takenByO")) { //checks to see if square has been played
(""); //does nothing
} else if (currentPlayer == "O") {
$(this).text("0").addClass("takenByO"); //change clicked square to o & adds class taken
playerChange(); //runs player change function
}});
function playerChange() {
if (currentPlayer === "X"){ //if current player is x, then switch to o
currentPlayer = "O";
} else {
currentPlayer = "X"; //if current player is not x then switch to x
}
winner();
}
$("button").on('click', function() { //click function for restart game button
$('.cell').text(""); //removes all added text from the cells
$('.cell').removeClass("takenByX"); //removes the taken class from the cells
$('.cell').removeClass("takenByO");
$('h1').text("C R O S S E S & & N O U G H T S").append;
if (currentPlayer == "O"){
playerChange(); //changes back to player x so o doesnt play first
}
});
function winner(){
if (
$(".cell1" && ".cell2" && ".cell3").hasClass("takenByX") || // -
$(".cell1" && ".cell5" && ".cell9").hasClass("takenByX") || // \
$(".cell1" && ".cell4" && ".cell7").hasClass("takenByX") || // |
$(".cell2" && ".cell5" && ".cell8").hasClass("takenByX") || // |
$(".cell3" && ".cell6" && ".cell9").hasClass("takenByX") || // |
$(".cell4" && ".cell5" && ".cell6").hasClass("takenByX") || // -
$(".cell7" && ".cell8" && ".cell9").hasClass("takenByX") // -
){
$('h1').text("Congratulations Winner!").append;
} else {
(""); //do nothing
}}
if (
$(".cell1" && ".cell2" && ".cell3").hasClass("takenByO") || // -
$(".cell1" && ".cell5" && ".cell9").hasClass("takenByO") || // \
$(".cell1" && ".cell4" && ".cell7").hasClass("takenByO") || // |
$(".cell2" && ".cell5" && ".cell8").hasClass("takenByO") || // |
$(".cell3" && ".cell6" && ".cell9").hasClass("takenByO") || // |
$(".cell4" && ".cell5" && ".cell6").hasClass("takenByO") || // -
$(".cell7" && ".cell8" && ".cell9").hasClass("takenByO") // -
){
$('h1').text("Congratulations Winner!").append;
} else {
(""); //do nothing
}
//if a winner is declared stop allowing clicks?
以外的font weight)。
如何使用SwiftUI设置导航栏项目的样式?
答案 0 :(得分:2)
我认为我们必须改变我们对 SwiftUI 的看法,因为“UIBarButtonItem.style”的概念不会直接适用。 SwiftUI 试图隐藏实现细节,并希望根据上下文将字体粗细更改为“自动神奇地工作”等概念。
在 Xcode 12.3 和 iOS 14.3 上,按钮样式似乎默认为粗体(在 NavigationView 的上下文中):
.navigationBarItems(
leading:
Button(action: {}) {
Text("Cancel")
},
trailing:
Button(action: {}) {
Text("Save")
}
)
改变样式的一种方法是添加按钮样式:
.navigationBarItems(
leading:
Button(action: {}) {
Text("Cancel")
}.buttonStyle(PlainButtonStyle()),
trailing:
Button(action: {}) {
Text("Save")
}
)
但这并没有达到预期的效果。 我不得不更改字体粗细,使“取消”成为常规样式,“保存”成为粗体...就像标准 iOS 一样:
.navigationBarItems(
leading:
Button(action: {}) {
Text("Cancel")
.fontWeight(Font.Weight.regular)
},
trailing:
Button(action: {}) {
Text("Save")
}
)
这样做的好处是您不需要了解“UIBarButtonItem.style:”的概念,您只需要了解Button
是什么以及{{1 }} 是 - 随着时间的推移应该熟悉哪些 API,因为它们是标准构建块。
答案 1 :(得分:-1)
而不是传递样式,而是将其附加到View组件。这将适应将来的操作系统样式更改:
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
var body: some View{
NavigationView {
Text("blah")
.navigationBarItems(leading: Text("done button")
.fontWeight(.medium)
.bold()
.foregroundColor(Color.red))
}
}
}
PlaygroundPage.current.setLiveView(ContentView())