消息 SwiftUI 上的 cornerRadius
cornerRadius on message SwiftUI
我遇到了这个问题,我的消息在另一边没有圆角半径。它是这样的:
还有它的代码:
HStack {
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
}
.cornerRadius(10)
如何让它的另一边也变圆?
修饰符的顺序很重要。
您首先应用填充,然后应用 cornerRadius。这给(不可见的)填充一个圆角。
如果你反过来做——先是 cornerRadius,然后是填充——它有效:
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.cornerRadius(10) // << first radius, then padding
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
实际上你正在做的是在背景之后应用填充,这样你的填充将应用到你的背景视图,现在你的背景视图不再位于角落,这就是为什么特定一侧没有圆角,你可以在背景前放置内边距以达到您的要求:
HStack {
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2) //HERE
.background(isSender ? Color.blue : Color(.systemGray5))
}
.cornerRadius(10)
您也可以为现有代码实现圆角,但只需将 cornerRadius 从 HStack 移动到您的背景视图,如下所示:
HStack {
HStack {
Text("text")
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.cornerRadius(10) //HERE
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
}
我遇到了这个问题,我的消息在另一边没有圆角半径。它是这样的:
还有它的代码:
HStack {
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
}
.cornerRadius(10)
如何让它的另一边也变圆?
修饰符的顺序很重要。
您首先应用填充,然后应用 cornerRadius。这给(不可见的)填充一个圆角。 如果你反过来做——先是 cornerRadius,然后是填充——它有效:
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.cornerRadius(10) // << first radius, then padding
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
实际上你正在做的是在背景之后应用填充,这样你的填充将应用到你的背景视图,现在你的背景视图不再位于角落,这就是为什么特定一侧没有圆角,你可以在背景前放置内边距以达到您的要求:
HStack {
HStack {
Text(text)
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2) //HERE
.background(isSender ? Color.blue : Color(.systemGray5))
}
.cornerRadius(10)
您也可以为现有代码实现圆角,但只需将 cornerRadius 从 HStack 移动到您的背景视图,如下所示:
HStack {
HStack {
Text("text")
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(isSender ? Color.white : Color(.label))
.padding()
}
.background(isSender ? Color.blue : Color(.systemGray5))
.cornerRadius(10) //HERE
.padding(isSender ? .leading : .trailing,
isSender ? UIScreen.main.bounds.width*0.28 : UIScreen.main.bounds.width*0.2)
}