因此,我需要使小數點后的數字比實際數字小,我將向你展示我的意思如下。
這是我的代碼:
import SwiftUI
struct BalanceDetailsView。View {
/MARK: - PROPERTIES
var balance: Float
var balanceString: String {
return balance.formattedWithSeparator
}
/MARK: - BODY
var body: some View {
VStack{
HStack{
Text(balanceString)
.font(.custom(K.fonts.gilroyBold, size: 24)
.multilineTextAlignment(.center)
.padding(.top)
}//:VSTACK。
}//:HSTACK。
}
}
struct BalanceDetailsView_Previews: PreviewProvider {
static var previews: some View {
BalanceDetailsView(余額:43678)。
.previewLayout(.sizeThatFits)
}
}
/Formatter extension i used to get this code
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
//最小的小數位,例如:將2顯示為2.00。
formatter.minimumFractionDigits = 2
//最大的小數位,例如:將2.5021顯示為2.50。
formatter.maximumFractionDigits = 2
return formatter
}()
}
extension Numeric {
var formattedWithSeparator: String { Formatter.withSeparator.string(for: self) ? " }
}
| 我得到的結果 | 我需要的結果。|
|---|---|
![]() |
![]() |
uj5u.com熱心網友回復:
當你知道你的字串的確切格式,比如在這個案例中,最小的字串長度將是4("0.00"),你可以安全地使用dropLast和dropFirst。
我建議將2移至priceFractionDigits常量,以減少代碼中常量的使用。
然后你可以使用字串連接,它將按基線對齊Text。
struct BalanceText。View {
var balance。Float
var balanceString: String {
return balance.formattedWithSeparator
}
var body: some View {
Text(balanceString.dropLast(priceFractionDigits))
.font(.system(size: 24))
Text(balanceString.dropFirst(balanceString.count - priceFractionDigits)
.font(.system(size: 18))
}
}
private let priceFractionDigits = 2
extension Formatter {
static let withSeparator: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
//最小的小數位,例如:將2顯示為2.00。
formatter.minimumFractionDigits = priceFractionDigits
//最大小數位,例如:將2.5021顯示為2.50。
formatter.maximumFractionDigits = priceFractionDigits
return formatter
}()
}
使用方法
BalanceText(balance: balance)
uj5u.com熱心網友回復:
下面是一個使用SwiftUI 3(iOS 15,macOS 12等)中新的AttributedString的例子
var balanceString: AttributedString {
var attributedString = AttributedString(balance.formattedWithSeparator)
guard let separator= Formatter. withSeparator.decimalSeparator else { return attributedString }
if let range = attributedString.range(of: separator) {
attributedString[attributedString.startIndex...attributedString.index(beforeCharacter: range.lowerBound)] 。
.font = Font.largeTitle
attributedString[attributedString.index(afterCharacter: range.lowerBound)...<attributedString.endIndex] 。
.字體 = Font.caption
}
return attributedString
}
我在這里使用了一些內置的字體樣式,但這應該很容易替換。還要注意的是,由于我們在這里設定了.font屬性,所以應該從Text
uj5u.com熱心網友回復:
你可以用 運算子將Text連接起來。
我稍微改變了你使用NumberFormatter的方式,所以它被當地的正確小數字符分割。
struct BalanceDetailsView。View {
private let wholeNumberPart: String
private let decimalNumberPart: String[/span]>
init(balance: Double) {
(wholeNumberPart, decimalNumberPart) = balance.formattedSplittingBySeparator
}
var body: some View {
Text(wholeNumberPart).font(.system(size: 24)
Text(decimalNumberPart).font(.system(size: 16)
}
}
extension Numeric {
var formattedSplittingBySeparator: ( whole: String, decimal: String) {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let str = formatter.string(for: self) ? ? "0(formatter.decimalSeparator!)00"?
let split = str.component(separedBy: formatter.decimalSeparator)
let whole = (split.first ? "0") formatter.decimalSeparator
let 十進制 = split. count == 2 ? split[1] : "00"
return (whole: 整數, decimal: 小數)
}
使用方法:
BalanceDetailsView(余額:43678)。
結果:
uj5u.com熱心網友回復:
你可以通過小數點分隔符來分割字串,并在零間距的HStack中顯示這些部分。
struct BalanceView : View {
let balance : Float
var body: some View {
let components = balance
.formattedWithSeparator
.組件(separateBy: Formatter.withSeparator.decimalSeparator)
HStack(alignment: .firstTextBaseline, spacing: 0) {
Text( components[0] )
if components.count > 1 {
Text(" 。")
Text( components[1] )
.font(.title)
}
}
.font(.largeTitle)
.multilineTextAlignment(.center)
.padding(.top)
}
}
用你的自定義字體替換字體
。在你的環境中,你可以使用它
struct BalanceDetailsView。View {
/MARK: - PROPERTIES
var balance: Float
/MARK: - BODY
var body。some View {
VStack{
BalanceView(balance: 余額)
}//:VSTACK。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307577.html
標籤:
上一篇:多行鉸鏈,帶看頭




