当前位置: 首页 > 面试题库 >

在Swift中将一行作为选择指示符添加到UITabbarItem

伊裕
2023-03-14
问题内容

我想使用UITabbarItems底部的粗线作为选择指示器。由于该应用程序必须能在不同手机尺寸上使用,因此我无法将图像用作选择指示器。这就是为什么我认为我必须使用Swift来做到这一点的原因。(该行必须是页面宽度的1/3)。

我尝试使用UITabBarItem.appearance()但没有成功。


问题答案:

我解决了我的问题。

这个小代码段的功能:

  • 宽度是动态的
  • 它是动画的
  • 它对于将来的功能更具可定制性
        class FirstViewController: UIViewController {

    let rectShape = CAShapeLayer()
    let indicatorHeight: CGFloat = 5
    var indicatorWidth: CGFloat!
    let indicatorBottomMargin: CGFloat = 2
    let indicatorLeftMargin: CGFloat = 2

    override func viewDidLoad() {
        super.viewDidLoad()

        // setup tabbar indicator
        rectShape.fillColor = UIColor.redColor().CGColor
        indicatorWidth = view.bounds.maxX / 2 // count of items
        self.tabBarController!.view.layer.addSublayer(rectShape)
        self.tabBarController?.delegate = self

        // initial position
        updateTabbarIndicatorBySelectedTabIndex(0)
    }

    func updateTabbarIndicatorBySelectedTabIndex(index: Int) -> Void
    {
        let updatedBounds = CGRect( x: CGFloat(index) * (indicatorWidth + indicatorLeftMargin),
                                    y: view.bounds.maxY - indicatorHeight,
                                    width: indicatorWidth - indicatorLeftMargin,
                                    height: indicatorHeight)

        let path = CGPathCreateMutable()
        CGPathAddRect(path, nil, updatedBounds)
        rectShape.path = path
    }
    }

    extension FirstViewController: UITabBarControllerDelegate {

    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
        updateTabbarIndicatorBySelectedTabIndex(tabBarController.selectedIndex)
    }
    }


 类似资料:
  • 问题内容: 在可选数组的末尾附加元素的正确方法是什么?假设我有一个可选数组myArray,我想在末尾附加“ 99”。Append()在nil数组上不起作用,因此我可以找到的唯一解决方案是以下方法,但是它看起来并不十分优雅: 问题答案: 您可以使用的事实,通过可选的链接调用的方法总是返回一个可选的值,即如果它是 不可能的 调用方法: 如果则则追加新元素并返回,以便不执行if块。 如果则不执行任何操作

  • 问题内容: 我对Swift还是相当陌生,在寻找一种将空间添加为千位分隔符的方法时遇到了很多麻烦。 我希望实现的是获取计算结果并将其显示在文本字段中,以便格式为: 2358 000 代替 2358000 例如。 我不确定是否应该格式化Int值,然后将其转换为String,或者在将Int值转换为String之后添加空格。任何帮助将不胜感激。 问题答案: 您可以使用NSNumberFormatter指定

  • 我想创建一个列表视图,只能通过鼠标进行多项选择(不按住ctrl或Shift) 单击某个项目应选择此项目。如果选择了其他项目,请将此新项目添加到所选列表中。以前选中此项目时,请取消选中它。 我不想保留选定的项目。selectionModel上有一个名为“selectIndices()”的方法,它只接受一个或多个整数,而不是整数列表。。。 有男孩有主意吗?

  • 问题内容: 我正在尝试显示带有的。当我添加行时: 我收到一个错误: 致命错误:解开Optional值时意外发现nil 这通过呈现在我的内部。 我已经从这里下载了代码,并且工作正常。我将该方法复制并粘贴到我的代码中,但它中断了。最后一行的 自我 存在没有影响。 问题答案: 因此,我开始检查看看我的代码与工作代码之间可能有什么不同。我注意到我的ViewController扩展了 显然这意味着我需要设置

  • 问题内容: 我正在尝试添加内容,但我做不到…有人可以帮助我吗? 这是我的代码: 问题答案: 您需要实现委托方法并从那里返回。 这是一个例子: 请记住,当您要使用自己的自定义图像时,需要创建一个 普通 图像。本应只用于标准引脚注解。 另请注意,您不应在致电后立即尝试访问。可能尚未准备好。 使用委托方法。 您还需要致电/

  • 本节的 TypeScript 版本有待更新 若要添加列以选择单行或所有行,可以使用 GridRowSelectionMixin。 GridRowSelectionMixin 在 Serenity 1.6.8+ 有效。 示例代码: public class MyGrid : EntityGrid<MyRow> { private GridRowSelectionMixin rowSelect