insertSubview() 覆盖整个 Mainview,即使在 0 处插入
insertSubview() covers the whole Mainview even though inserted at 0
我使用以下代码将 UIView 插入到 UIButton 中:
let backgroundView = UIView()
backgroundView.backgroundColor = .red
backgroundView.translatesAutoresizingMaskIntoConstraints = false
blueButton.insertSubview(backgroundView, at: 0)
NSLayoutConstraint.activate([
backgroundView.leadingAnchor.constraint(equalTo: blueButton.leadingAnchor),
backgroundView.trailingAnchor.constraint(equalTo: blueButton.trailingAnchor),
backgroundView.topAnchor.constraint(equalTo: blueButton.topAnchor),
backgroundView.bottomAnchor.constraint(equalTo: blueButton.bottomAnchor)
])
问题是 backgroundView 覆盖了整个按钮,我只看到红色字段而不是带有红色背景(我的子视图)的按钮(它的图像)。
这是我图片的故事板部分。除了尝试将子视图放入:
之外,我不会使用此按钮在代码中执行其他操作
我的目标 是像下图这样的圆形背景。例如,红色圆圈按钮有一个圆形的红色(但比按钮的红色更亮)backgroundView.The按钮的标准背景应该保持不变。
我也试过将子视图发送到后台,但它对我不起作用:
blueButton.sendSubviewToBack(backgroundView)
我降低了子视图的 alpha 值以查看按钮图像是否仍然存在。
for view in blueButton.subviews {
view.alpha = 0.5
}
它是:
我该如何解决这个问题?
不要将额外的子视图注入到按钮中。如果目标是使按钮的背景颜色为红色,请将其 backgroundColor
设置为 .red
。如果目标是在按钮图像后面放置一些东西,那就是 backgroundImage
的用途。或者只是让按钮图像看起来像您真正想要的图像。
我做了这个按钮:
它看起来很像你的照片。这是代码:
let im = UIGraphicsImageRenderer(size: CGSize(width: 30, height: 30)).image {
ctx in
UIColor.red.withAlphaComponent(0.2).setFill()
ctx.cgContext.fillEllipse(in: CGRect(x: 0, y: 0, width: 30, height: 30))
UIColor.red.setFill()
ctx.cgContext.fillEllipse(in: CGRect(x: 5, y: 5, width: 20, height: 20))
}
b.setImage(im.withRenderingMode(.alwaysOriginal), for: .normal)
我认为这比搞乱不需要的非法子视图要好得多。
我使用以下代码将 UIView 插入到 UIButton 中:
let backgroundView = UIView()
backgroundView.backgroundColor = .red
backgroundView.translatesAutoresizingMaskIntoConstraints = false
blueButton.insertSubview(backgroundView, at: 0)
NSLayoutConstraint.activate([
backgroundView.leadingAnchor.constraint(equalTo: blueButton.leadingAnchor),
backgroundView.trailingAnchor.constraint(equalTo: blueButton.trailingAnchor),
backgroundView.topAnchor.constraint(equalTo: blueButton.topAnchor),
backgroundView.bottomAnchor.constraint(equalTo: blueButton.bottomAnchor)
])
问题是 backgroundView 覆盖了整个按钮,我只看到红色字段而不是带有红色背景(我的子视图)的按钮(它的图像)。
这是我图片的故事板部分。除了尝试将子视图放入:
之外,我不会使用此按钮在代码中执行其他操作我的目标 是像下图这样的圆形背景。例如,红色圆圈按钮有一个圆形的红色(但比按钮的红色更亮)backgroundView.The按钮的标准背景应该保持不变。
我也试过将子视图发送到后台,但它对我不起作用:
blueButton.sendSubviewToBack(backgroundView)
我降低了子视图的 alpha 值以查看按钮图像是否仍然存在。
for view in blueButton.subviews {
view.alpha = 0.5
}
它是:
我该如何解决这个问题?
不要将额外的子视图注入到按钮中。如果目标是使按钮的背景颜色为红色,请将其 backgroundColor
设置为 .red
。如果目标是在按钮图像后面放置一些东西,那就是 backgroundImage
的用途。或者只是让按钮图像看起来像您真正想要的图像。
我做了这个按钮:
它看起来很像你的照片。这是代码:
let im = UIGraphicsImageRenderer(size: CGSize(width: 30, height: 30)).image {
ctx in
UIColor.red.withAlphaComponent(0.2).setFill()
ctx.cgContext.fillEllipse(in: CGRect(x: 0, y: 0, width: 30, height: 30))
UIColor.red.setFill()
ctx.cgContext.fillEllipse(in: CGRect(x: 5, y: 5, width: 20, height: 20))
}
b.setImage(im.withRenderingMode(.alwaysOriginal), for: .normal)
我认为这比搞乱不需要的非法子视图要好得多。