如何在 swiftui 中使用选择器更改文本大小
How to change text size using picker in swiftui
我是swiftui的初学者。我开始一个圣经应用程序作为入门项目。我创建了一个设置,然后从该设置中,我想使用选择器更改字体大小。我在网上搜索解决方案已经 4 天了,但我不知道该怎么办。
问题 1:我不知道如何根据选择器选择更新字体大小。有人说使用.onChange,但我不知道该怎么做。所以,我尝试使用 switch case 方法,但仍然不知道如何更新文本。另外,我尝试使用自定义修饰符来替换 .font(.footnote) 之类的东西。但是,我仍然不知道如何更新它并且 EnvironmentalObject 根本没有帮助。请指导我如何解决问题。
问题 2:每次我播放 canvas 时,选择器选择总是从默认索引开始,这是有道理的。但是在实际应用中,用户选择不同的索引后,它总是从默认索引开始吗?或者我应该怎么做才能保留预选的索引。
这是我的代码:
import SwiftUI
struct Setting: View {
@State private var fontSizeIndex = 3
@State private var fontIndex = 1
var body: some View {
NavigationView {
ScrollView {
// Text Settings
Form {
// Font Size Picker
Section(header: Text("Text Settings")) {
Picker(selection: $fontSizeIndex, label: Text("Font Size"),
content: {
Text("Extra Small").tag(1)
Text("Small").tag(2)
Text("Medium").tag(3)
Text("Large").tag(4)
Text("Extra Large").tag(5)
})
// Font Picker
// I plan to make custom fonts if I know how to update my
// selection
Picker(selection: $fontIndex, label: Text("Font"), content: {
Text("Font1").tag(1)
Text("Font2").tag(2)
Text("Font3").tag(3)
Text("Font4").tag(4)
Text("Font5").tag(5)
Text("Font6").tag(6)
Text("Font7").tag(7)
})
}
}
.frame(height:280)
}
}
}
这是我的 Text 或 Scripture(),在另一个视图中
import SwiftUI
struct Scripture: View {
//@EnvironmentObject var fsc: FontSizeChanging
var body: some View {
ScrollView {
Text("Hih in Zeisu Khazih khang ciamtehna ahi hi. Amah in David tapa hi a, David in Abraham tapa ahi hi. 2 Abraham tapa Isaac, Isaac tapa Jacob, Jacob tapa Judah le a sanggam pasal teng ahi hi. 3 Judah in a zi Tamar tawh a neih a tapa Perez le Zerah, Perez tapa Hezron, Hezron tapa Ram, 4 Ram tapa Amminadab, Amminadab tapa Nahshon, Nahshon tapa Salmon, 5 Salmon in a zi Rahab tawh a neih a tapa Boaz, Boaz in a zi Ruth tawh a neih a tapa Obed, Obed tapa Jesse, 6 Jesse tapa kumpipa David ahi hi. David in Uriah zi tawh a neih a tapa Solomon, 7 Solomon tapa Rehoboam, Rehoboam tapa Abijah, Abijah tapa Asa, 8 Asa tapa Jehoshaphat, Jehoshaphat tapa Joram, Joram tapa Uzziah, 9 Uzziah tapa Jotham, Jotham tapa Ahaz, Ahaz tapa Hezekiah, 10 Hezekiah tapa Manasseh, Manasseh tapa Amon, Amon tapa Josiah ahi hi. 11 Jeconiah le a sanggam pasal tengin Babylon gamah sala a kipaipih madeuh in a suak Josiah tate ahi uh hi. 12 Babylon gama saltan khit ciangin Jeconiah in a neih a tapa Shealtiel, Shealtiel tapa Zerubbabel, 13 Zerubbabel tapa Abiud, Abiud tapa Eliakim, Eliakim tapa Azor, 14 Azor tapa Zadok, Zadok tapa Achim, Achim tapa Eliud, 15 Eliud tapa Eleazar, Eleazar tapa Matthan, Matthan tapa Jacob, 16 Jacob tapa Joseph hi a, Joseph in Khazih a kici Zeisu a hong suahna Mary pasal ahi hi. 17 Tua hi a, Abraham khang panin David khang ciang a vekin khang sawm le khang li, David khang panin Babylon gama saltang dinga a kimat hun ciang khang sawm le khang li, Babylon gama saltan hun pan Khazih khang ciang khang sawm le khang li mah ahi hi. 18 Zeisu Khazih a suahzia hih bang ahi hi. A nu Mary pen Joseph zi dingin zuthawl kipiasa hi a, a kiteenma un Kha Siangtho hangin gai hi ci in kithei hi. 19 A lawmpa Joseph in mi lungsim hoih hi a, a lawmnu Mary min daisak nuamlo ahih manin maksim dingin a ngaihsun hi.")
//.font(fsc.fontSize)
.foregroundColor(.primary)
//.font(Setting(fontSizeIndex: self.$fontSizeIndex))
.multilineTextAlignment(.leading) // test .center here
.lineSpacing(5)
.padding()
}
}
}
struct Scripture_Previews: PreviewProvider {
static var previews: some View {
Scripture()
}
}
以下应该有效。
我在屏幕右上角添加了一个齿轮图标,以便更轻松地在设置和圣经之间导航。这将使您可以轻松更改字体大小。
我的方法使用@AppStorage。这会保存数据,因此当用户启动应用程序时,他们的字体大小选择将保留。您可以在需要编辑字体大小的任何地方使用它。
要更改字体大小,只需更新选择器内 .tag()
中的值。我选择了一组随机数字。这是您要输入所需字体大小的地方。
import SwiftUI
struct Setting: View {
@State private var fontSizeIndex = 3
@State private var fontIndex = 1
@AppStorage("fontSize") var fontSize = 50
var body: some View {
NavigationView {
ScrollView {
// Text Settings
Form {
// Font Size Picker
Section(header: Text("Text Settings")) {
Picker(selection: $fontSize, label: Text("Font Size"),
content: {
Text("Extra Small").tag(10)
Text("Small").tag(15)
Text("Medium").tag(20)
Text("Large").tag(25)
Text("Extra Large").tag(50)
})
// Font Picker
// I plan to make custom fonts if I know how to update my
// selection
Picker(selection: $fontIndex, label: Text("Font"), content: {
Text("Font1").tag(1)
Text("Font2").tag(2)
Text("Font3").tag(3)
Text("Font4").tag(4)
Text("Font5").tag(5)
Text("Font6").tag(6)
Text("Font7").tag(7)
})
}
}
.frame(height:280)
}
}
}
}
struct Scripture: View {
//@EnvironmentObject var fsc: FontSizeChanging
@AppStorage("fontSize") var fontSize = 50
var body: some View {
NavigationView {
ScrollView {
Text("Hih in Zeisu Khazih khang ciamtehna ahi hi. Amah in David tapa hi a, David in Abraham tapa ahi hi. 2 Abraham tapa Isaac, Isaac tapa Jacob, Jacob tapa Judah le a sanggam pasal teng ahi hi. 3 Judah in a zi Tamar tawh a neih a tapa Perez le Zerah, Perez tapa Hezron, Hezron tapa Ram, 4 Ram tapa Amminadab, Amminadab tapa Nahshon, Nahshon tapa Salmon, 5 Salmon in a zi Rahab tawh a neih a tapa Boaz, Boaz in a zi Ruth tawh a neih a tapa Obed, Obed tapa Jesse, 6 Jesse tapa kumpipa David ahi hi. David in Uriah zi tawh a neih a tapa Solomon, 7 Solomon tapa Rehoboam, Rehoboam tapa Abijah, Abijah tapa Asa, 8 Asa tapa Jehoshaphat, Jehoshaphat tapa Joram, Joram tapa Uzziah, 9 Uzziah tapa Jotham, Jotham tapa Ahaz, Ahaz tapa Hezekiah, 10 Hezekiah tapa Manasseh, Manasseh tapa Amon, Amon tapa Josiah ahi hi. 11 Jeconiah le a sanggam pasal tengin Babylon gamah sala a kipaipih madeuh in a suak Josiah tate ahi uh hi. 12 Babylon gama saltan khit ciangin Jeconiah in a neih a tapa Shealtiel, Shealtiel tapa Zerubbabel, 13 Zerubbabel tapa Abiud, Abiud tapa Eliakim, Eliakim tapa Azor, 14 Azor tapa Zadok, Zadok tapa Achim, Achim tapa Eliud, 15 Eliud tapa Eleazar, Eleazar tapa Matthan, Matthan tapa Jacob, 16 Jacob tapa Joseph hi a, Joseph in Khazih a kici Zeisu a hong suahna Mary pasal ahi hi. 17 Tua hi a, Abraham khang panin David khang ciang a vekin khang sawm le khang li, David khang panin Babylon gama saltang dinga a kimat hun ciang khang sawm le khang li, Babylon gama saltan hun pan Khazih khang ciang khang sawm le khang li mah ahi hi. 18 Zeisu Khazih a suahzia hih bang ahi hi. A nu Mary pen Joseph zi dingin zuthawl kipiasa hi a, a kiteenma un Kha Siangtho hangin gai hi ci in kithei hi. 19 A lawmpa Joseph in mi lungsim hoih hi a, a lawmnu Mary min daisak nuamlo ahih manin maksim dingin a ngaihsun hi.")
//.font(fsc.fontSize)
.font(.system(size: CGFloat(fontSize)))
.foregroundColor(.primary)
//.font(Setting(fontSizeIndex: self.$fontSizeIndex))
.multilineTextAlignment(.leading) // test .center here
.lineSpacing(5)
.padding()
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
HStack {
NavigationLink(destination: Setting(), label: {
Image(systemName: "gearshape")
})
}
}
}
}
}
}
struct Scripture_Previews: PreviewProvider {
static var previews: some View {
Scripture()
}
}
我是swiftui的初学者。我开始一个圣经应用程序作为入门项目。我创建了一个设置,然后从该设置中,我想使用选择器更改字体大小。我在网上搜索解决方案已经 4 天了,但我不知道该怎么办。
问题 1:我不知道如何根据选择器选择更新字体大小。有人说使用.onChange,但我不知道该怎么做。所以,我尝试使用 switch case 方法,但仍然不知道如何更新文本。另外,我尝试使用自定义修饰符来替换 .font(.footnote) 之类的东西。但是,我仍然不知道如何更新它并且 EnvironmentalObject 根本没有帮助。请指导我如何解决问题。
问题 2:每次我播放 canvas 时,选择器选择总是从默认索引开始,这是有道理的。但是在实际应用中,用户选择不同的索引后,它总是从默认索引开始吗?或者我应该怎么做才能保留预选的索引。
这是我的代码:
import SwiftUI
struct Setting: View {
@State private var fontSizeIndex = 3
@State private var fontIndex = 1
var body: some View {
NavigationView {
ScrollView {
// Text Settings
Form {
// Font Size Picker
Section(header: Text("Text Settings")) {
Picker(selection: $fontSizeIndex, label: Text("Font Size"),
content: {
Text("Extra Small").tag(1)
Text("Small").tag(2)
Text("Medium").tag(3)
Text("Large").tag(4)
Text("Extra Large").tag(5)
})
// Font Picker
// I plan to make custom fonts if I know how to update my
// selection
Picker(selection: $fontIndex, label: Text("Font"), content: {
Text("Font1").tag(1)
Text("Font2").tag(2)
Text("Font3").tag(3)
Text("Font4").tag(4)
Text("Font5").tag(5)
Text("Font6").tag(6)
Text("Font7").tag(7)
})
}
}
.frame(height:280)
}
}
}
这是我的 Text 或 Scripture(),在另一个视图中
import SwiftUI
struct Scripture: View {
//@EnvironmentObject var fsc: FontSizeChanging
var body: some View {
ScrollView {
Text("Hih in Zeisu Khazih khang ciamtehna ahi hi. Amah in David tapa hi a, David in Abraham tapa ahi hi. 2 Abraham tapa Isaac, Isaac tapa Jacob, Jacob tapa Judah le a sanggam pasal teng ahi hi. 3 Judah in a zi Tamar tawh a neih a tapa Perez le Zerah, Perez tapa Hezron, Hezron tapa Ram, 4 Ram tapa Amminadab, Amminadab tapa Nahshon, Nahshon tapa Salmon, 5 Salmon in a zi Rahab tawh a neih a tapa Boaz, Boaz in a zi Ruth tawh a neih a tapa Obed, Obed tapa Jesse, 6 Jesse tapa kumpipa David ahi hi. David in Uriah zi tawh a neih a tapa Solomon, 7 Solomon tapa Rehoboam, Rehoboam tapa Abijah, Abijah tapa Asa, 8 Asa tapa Jehoshaphat, Jehoshaphat tapa Joram, Joram tapa Uzziah, 9 Uzziah tapa Jotham, Jotham tapa Ahaz, Ahaz tapa Hezekiah, 10 Hezekiah tapa Manasseh, Manasseh tapa Amon, Amon tapa Josiah ahi hi. 11 Jeconiah le a sanggam pasal tengin Babylon gamah sala a kipaipih madeuh in a suak Josiah tate ahi uh hi. 12 Babylon gama saltan khit ciangin Jeconiah in a neih a tapa Shealtiel, Shealtiel tapa Zerubbabel, 13 Zerubbabel tapa Abiud, Abiud tapa Eliakim, Eliakim tapa Azor, 14 Azor tapa Zadok, Zadok tapa Achim, Achim tapa Eliud, 15 Eliud tapa Eleazar, Eleazar tapa Matthan, Matthan tapa Jacob, 16 Jacob tapa Joseph hi a, Joseph in Khazih a kici Zeisu a hong suahna Mary pasal ahi hi. 17 Tua hi a, Abraham khang panin David khang ciang a vekin khang sawm le khang li, David khang panin Babylon gama saltang dinga a kimat hun ciang khang sawm le khang li, Babylon gama saltan hun pan Khazih khang ciang khang sawm le khang li mah ahi hi. 18 Zeisu Khazih a suahzia hih bang ahi hi. A nu Mary pen Joseph zi dingin zuthawl kipiasa hi a, a kiteenma un Kha Siangtho hangin gai hi ci in kithei hi. 19 A lawmpa Joseph in mi lungsim hoih hi a, a lawmnu Mary min daisak nuamlo ahih manin maksim dingin a ngaihsun hi.")
//.font(fsc.fontSize)
.foregroundColor(.primary)
//.font(Setting(fontSizeIndex: self.$fontSizeIndex))
.multilineTextAlignment(.leading) // test .center here
.lineSpacing(5)
.padding()
}
}
}
struct Scripture_Previews: PreviewProvider {
static var previews: some View {
Scripture()
}
}
以下应该有效。
我在屏幕右上角添加了一个齿轮图标,以便更轻松地在设置和圣经之间导航。这将使您可以轻松更改字体大小。
我的方法使用@AppStorage。这会保存数据,因此当用户启动应用程序时,他们的字体大小选择将保留。您可以在需要编辑字体大小的任何地方使用它。
要更改字体大小,只需更新选择器内 .tag()
中的值。我选择了一组随机数字。这是您要输入所需字体大小的地方。
import SwiftUI
struct Setting: View {
@State private var fontSizeIndex = 3
@State private var fontIndex = 1
@AppStorage("fontSize") var fontSize = 50
var body: some View {
NavigationView {
ScrollView {
// Text Settings
Form {
// Font Size Picker
Section(header: Text("Text Settings")) {
Picker(selection: $fontSize, label: Text("Font Size"),
content: {
Text("Extra Small").tag(10)
Text("Small").tag(15)
Text("Medium").tag(20)
Text("Large").tag(25)
Text("Extra Large").tag(50)
})
// Font Picker
// I plan to make custom fonts if I know how to update my
// selection
Picker(selection: $fontIndex, label: Text("Font"), content: {
Text("Font1").tag(1)
Text("Font2").tag(2)
Text("Font3").tag(3)
Text("Font4").tag(4)
Text("Font5").tag(5)
Text("Font6").tag(6)
Text("Font7").tag(7)
})
}
}
.frame(height:280)
}
}
}
}
struct Scripture: View {
//@EnvironmentObject var fsc: FontSizeChanging
@AppStorage("fontSize") var fontSize = 50
var body: some View {
NavigationView {
ScrollView {
Text("Hih in Zeisu Khazih khang ciamtehna ahi hi. Amah in David tapa hi a, David in Abraham tapa ahi hi. 2 Abraham tapa Isaac, Isaac tapa Jacob, Jacob tapa Judah le a sanggam pasal teng ahi hi. 3 Judah in a zi Tamar tawh a neih a tapa Perez le Zerah, Perez tapa Hezron, Hezron tapa Ram, 4 Ram tapa Amminadab, Amminadab tapa Nahshon, Nahshon tapa Salmon, 5 Salmon in a zi Rahab tawh a neih a tapa Boaz, Boaz in a zi Ruth tawh a neih a tapa Obed, Obed tapa Jesse, 6 Jesse tapa kumpipa David ahi hi. David in Uriah zi tawh a neih a tapa Solomon, 7 Solomon tapa Rehoboam, Rehoboam tapa Abijah, Abijah tapa Asa, 8 Asa tapa Jehoshaphat, Jehoshaphat tapa Joram, Joram tapa Uzziah, 9 Uzziah tapa Jotham, Jotham tapa Ahaz, Ahaz tapa Hezekiah, 10 Hezekiah tapa Manasseh, Manasseh tapa Amon, Amon tapa Josiah ahi hi. 11 Jeconiah le a sanggam pasal tengin Babylon gamah sala a kipaipih madeuh in a suak Josiah tate ahi uh hi. 12 Babylon gama saltan khit ciangin Jeconiah in a neih a tapa Shealtiel, Shealtiel tapa Zerubbabel, 13 Zerubbabel tapa Abiud, Abiud tapa Eliakim, Eliakim tapa Azor, 14 Azor tapa Zadok, Zadok tapa Achim, Achim tapa Eliud, 15 Eliud tapa Eleazar, Eleazar tapa Matthan, Matthan tapa Jacob, 16 Jacob tapa Joseph hi a, Joseph in Khazih a kici Zeisu a hong suahna Mary pasal ahi hi. 17 Tua hi a, Abraham khang panin David khang ciang a vekin khang sawm le khang li, David khang panin Babylon gama saltang dinga a kimat hun ciang khang sawm le khang li, Babylon gama saltan hun pan Khazih khang ciang khang sawm le khang li mah ahi hi. 18 Zeisu Khazih a suahzia hih bang ahi hi. A nu Mary pen Joseph zi dingin zuthawl kipiasa hi a, a kiteenma un Kha Siangtho hangin gai hi ci in kithei hi. 19 A lawmpa Joseph in mi lungsim hoih hi a, a lawmnu Mary min daisak nuamlo ahih manin maksim dingin a ngaihsun hi.")
//.font(fsc.fontSize)
.font(.system(size: CGFloat(fontSize)))
.foregroundColor(.primary)
//.font(Setting(fontSizeIndex: self.$fontSizeIndex))
.multilineTextAlignment(.leading) // test .center here
.lineSpacing(5)
.padding()
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
HStack {
NavigationLink(destination: Setting(), label: {
Image(systemName: "gearshape")
})
}
}
}
}
}
}
struct Scripture_Previews: PreviewProvider {
static var previews: some View {
Scripture()
}
}