【发布时间】:2021-08-02 14:36:55
【问题描述】:
我有 5 个标签栏项目,中间有一个大圆形按钮,我想禁用这个大按钮的标签(锻炼),但标签的颜色不应该是做作的。我通过将标签值定义到锻炼项目栏来禁用锻炼选项卡栏选择。但它也禁用了按钮(+),但我只想禁用锻炼标签。我将如何实现这一目标?大家有什么意见,请帮帮我
标签栏控制器代码:
import UIKit
import SwiftIcons
class HomeViewController: UITabBarController, UITabBarControllerDelegate {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
let selectedColor = UIColor(red: 16.0/255.0, green: 78.0/255.0, blue: 91.0/255.0, alpha: 1.0)
let unselectedColor = UIColor(red: 16.0/255.0, green: 224.0/255.0, blue: 223.0/255.0, alpha: 1.0)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: unselectedColor], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: selectedColor], for: .selected)
//store every image in a variable
let userUnselectedImage: UIImage = UIImage(named: "add_workout_icon")!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
let userSelectedImage: UIImage = UIImage(named: "add_workout_icon")!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
tabBar.items![2].image = userUnselectedImage
tabBar.items![2].selectedImage = userSelectedImage
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
let tagValue = viewController.tabBarItem.tag
if tagValue == 2 {
return false
}
return true
}
}
自定义标签栏类
import UIKit
@IBDesignable
class TabBarShape: UITabBar {
private var shapeLayer: CALayer?
private func addShape() {
let shapeLayer = CAShapeLayer()
shapeLayer.path = createPath()
shapeLayer.strokeColor = UIColor.lightGray.cgColor
shapeLayer.fillColor = UIColor.white.cgColor
shapeLayer.lineWidth = 1.0
//The below 4 lines are for shadow above the bar. you can skip them if you do not want a shadow
shapeLayer.shadowOffset = CGSize(width:0, height:0)
shapeLayer.shadowRadius = 10
shapeLayer.shadowColor = UIColor.gray.cgColor
shapeLayer.shadowOpacity = 0.3
if let oldShapeLayer = self.shapeLayer {
self.layer.replaceSublayer(oldShapeLayer, with: shapeLayer)
} else {
self.layer.insertSublayer(shapeLayer, at: 0)
}
self.shapeLayer = shapeLayer
}
override func draw(_ rect: CGRect) {
self.addShape()
}
func createPath() -> CGPath {
let height: CGFloat = 35.0
let path = UIBezierPath()
let centerWidth = self.frame.width / 2
path.move(to: CGPoint(x: 0, y: 0)) // start top left
path.addLine(to: CGPoint(x: (centerWidth - height * 2) + 30, y: 0)) // the beginning of the trough
//path.addLine(to: CGPoint(x: 150, y: 0)) // hardcoded
print("x=>\((centerWidth - height * 2) + 37.5)")
path.addCurve(to: CGPoint(x: centerWidth, y: height),
controlPoint1: CGPoint(x: (centerWidth - 30), y: 0), controlPoint2: CGPoint(x: centerWidth - 35, y: height))
path.addCurve(to: CGPoint(x: (centerWidth + height * 2) - 30 , y: 0),
//path.addCurve(to: CGPoint(x: 230, y: 0),
controlPoint1: CGPoint(x: centerWidth + 35, y: height), controlPoint2: CGPoint(x: (centerWidth + 30), y: 0))
print("x2=>\((centerWidth + height * 2))")
path.addLine(to: CGPoint(x: self.frame.width, y: 0))
path.addLine(to: CGPoint(x: self.frame.width, y: self.frame.height))
path.addLine(to: CGPoint(x: 0, y: self.frame.height))
path.close()
return path.cgPath
}
}
【问题讨论】:
-
您是否为此使用了自定义库?
-
是的............
-
查看答案。
-
检查已编辑的答案。
标签: ios swift uitabbarcontroller uitabbaritem