【问题标题】:how can I remove the top border on UIToolBar如何删除 UIToolBar 上的顶部边框
【发布时间】:2012-03-15 09:10:14
【问题描述】:

我已将我的 UIToolBar 色调颜色设置为某个值,并且我看到了要删除的这条边界线:

如何去除这个黑色边框>

【问题讨论】:

    标签: iphone objective-c ios ipad


    【解决方案1】:

    正确的答案是极权主义者...仅供参考。 https://stackoverflow.com/a/14448645/627299

    我的回复还在下面供参考。


    这是我使用白色背景工具栏所做的...

    whiteToolBar.layer.borderWidth = 1;
    whiteToolBar.layer.borderColor = [[UIColor whiteColor] CGColor];    
    

    也许你可以用你的颜色做同样的事情。

    【讨论】:

    • 使用 whiteToolBar.clipToBounds = YES 会干净很多
    • Swift for @jomafer 的评论:myToolbar.clipsToBounds = true
    • 我在此加入感谢过去的自己的人俱乐部
    • 在界面生成器中设置剪辑到边界或如上所述,它是。更好的解决方案。
    • clipToBounds 自 iPhone X 以来并不理想,因为它会将安全区域留空
    【解决方案2】:

    你可以这样做:

    self.navigationController.toolbar.clipsToBounds = YES;
    

    【讨论】:

    • 这在 iOS 6 中对我没有帮助
    • 这也适用于裸 UIToolbar;不必是导航控制器的一部分。
    • 在带有 SDK 7 的 iOS 7.x 上像魅力一样工作。
    • Nico,这是可行的,因为“clipsToBounds”使视图仅在其范围内绘制。在这种情况下,图层的边框绘制在视图边界之外,因此将“clipsToBounds”设置为 true“禁用”它的边框。
    • clipsToBounds = YES 破坏了 iPhone X 上工具栏的外观。它隐藏了顶部边框,但也阻止了工具栏的背景延伸到屏幕的底部边缘。
    【解决方案3】:

    将样式设置为 UIBarStyleBlackTranslucent 为我做了(iOS 6)

    【讨论】:

      【解决方案4】:

      这在 iOS 版本上无法始终如一地工作,似乎在 iOS7 上也无法正常工作。我在另一个问题中回答了这个问题:https://stackoverflow.com/a/19893602/452082,您可以修改该解决方案以仅删除背景阴影(并留下您的 toolbar.backgroundColor 您喜欢的任何颜色)

      【讨论】:

        【解决方案5】:
        toolbar1.clipsToBounds = YES;  
        

        为我工作,以防有人仍在尝试使用导航栏

        【讨论】:

        • 这会导致底部在 iPhone X 上的安全区域边界处被切断
        【解决方案6】:

        我对这些答案有些困惑,但我错过了您使用 Outlet 的要点,所以这里要清楚的是我用来隐藏边框的快速代码:

        import UIKit
        
        class ViewController: UIViewController {
        
            //MARK Outlets
            @IBOutlet weak var ToolBar: UIToolbar!
        
            //MARK View Functions
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
        
                // Hide the bottom toolbar's top border
                ToolBar.clipsToBounds = true
            }
        }
        

        为此,我已将一个工具栏拖到视图的底部,但它不是顶部导航栏,其他问题涉及到。

        【讨论】:

        • 很好,这很有效。你能解释一下为什么吗?谢谢。
        【解决方案7】:

        setShadowImage 为 [UIImage new]

        【讨论】:

        • 毫无疑问,正确答案
        • 这是你需要用来避免在安全区域丢失工具栏颜色的工具,例如在 iPhone X 的底部,即 [self setShadowImage:UIImage.new forToolbarPosition:UIBarPositionAny];
        【解决方案8】:

        clipsToBounds 技术可以剪切 UIToolBar 的阴影以及背景视图。在 iPhone X 上,这意味着背景不再超出safe area

        下面的解决方案使用蒙版仅剪切 UITabBar 的顶部。掩码在 UIToolBar 子类中呈现,并且掩码框架在 layoutSubviews 的覆盖中保持更新。

        class Toolbar: UIToolbar {
        
            fileprivate let maskLayer: CALayer = {
                let layer = CALayer()
                layer.backgroundColor = UIColor.black.cgColor
                return layer
            }()
        
            override init(frame: CGRect) {
                super.init(frame: frame)
                initialize()
            }
        
            required init?(coder aDecoder: NSCoder) {
                super.init(coder: aDecoder)
                initialize()
            }
        
            fileprivate func initialize() {
                layer.mask = maskLayer
                // Customize toolbar here
            }
        
            override func layoutSubviews() {
                super.layoutSubviews()
                // height is an arbitrary number larger than the distance from the top of the UIToolbar to the bottom of the screen
                maskLayer.frame = CGRect(x: -10, y: 0, width: frame.width + 20, height: 500)
            }
        
        }
        

        【讨论】:

        • 这适用于除 iPhone X 以外的任何设备。我逐行复制了代码,创建了一个新的 Swift 类并在 Interface Builder 中指定了该类。
        • @E-Madd 也许界面生成器是不同的。在我们的设置中,我们使用 UINavigationBar 和 UIToolbar 子类以编程方式创建 UINavigationController,如下所示:let navigationController = UINavigationController(navigationBarClass: NavigationBar.self, toolbarClass: Toolbar.self)
        • 我对此进行了重构,没有任何改变。我还有边界。实际上,它似乎是主视图和工具栏之间的差距。
        【解决方案9】:

        创建一个 1 像素 x 1 像素的清晰图像并将其命名为 clearPixel.png

        toolbar.setShadowImage(UIImage(named: "clearPixel.png"), forToolbarPosition: UIBarPosition.any)
        

        【讨论】:

        • 也可以简单做UIImage(),不需要资产
        【解决方案10】:
        navigationController?.toolbar.barTintColor = .white
        
        navigationController?.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
        

        【讨论】:

          【解决方案11】:
          [[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefault];
          
          [[UIToolbar appearance] setShadowImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionBottom];
          
          [UIToolbar appearance].barTintColor = [UIColor ...];```
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多