【问题标题】:UINavigationBar Rounded Two CornersUINavigationBar 圆角两个角
【发布时间】:2011-05-13 05:33:40
【问题描述】:

我想将 UINavigationBar 的右上角和左上角四舍五入。

我知道有更改视图角半径的功能,但是否可以执行类似于标准 UINavigationBar 的操作?

如果您不知道我在说什么,请查看:

谢谢!

【问题讨论】:

  • 可以更改视角角半径,但会影响所有角!

标签: iphone objective-c cocoa-touch uinavigationbar rounded-corners


【解决方案1】:

以下代码适用于我(在 iOS5 上测试)。 以下代码围绕主导航栏的左上角/右上角。此外,它还为其添加了阴影:

CALayer *capa = [self.navigationController navigationBar].layer;
[capa setShadowColor: [[UIColor blackColor] CGColor]];
[capa setShadowOpacity:0.85f];
[capa setShadowOffset: CGSizeMake(0.0f, 1.5f)];
[capa setShadowRadius:2.0f];  
[capa setShouldRasterize:YES];


//Round
CGRect bounds = capa.bounds;
bounds.size.height += 10.0f;    //I'm reserving enough room for the shadow
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds 
                                               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                                     cornerRadii:CGSizeMake(10.0, 10.0)];

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = bounds;
maskLayer.path = maskPath.CGPath;

[capa addSublayer:maskLayer];
capa.mask = maskLayer;

【讨论】:

  • @Joze 它就像一个魅力,但我的 UIButton 背部停止工作......为什么?
  • 你好胡安。也许 button.frame.origin.y 被屏蔽了。尝试更改 y 坐标(可能是 +2 像素)并尝试一下。也许这就是问题
  • 绝妙的答案!这确实使导航栏看起来很棒。我遇到的其他人阅读的一个快速问题:如果您遇到 mach-o 链接器错误,您必须在项目设置中链接quartzcore 库。再次感谢@Joze!
  • 就像@jonstaff 说的那样,链接到您的项目设置中的quartzcore.framework 文件,但也要在您尝试使用的.m 文件中放置:#import 这段代码。
  • 我想知道为什么它不能使用 UIRectCornerBottomLeft | UIRectCornerBottomRight
【解决方案2】:

最好的方法是覆盖 UINavigationBar 中的 drawRect 并使用自定义图像。

【讨论】:

【解决方案3】:

您可能会发现这很有帮助。也许你也可以用 CoreAnim/Image 做一些遮罩?我对 Core* 家族不是很了解...

http://foobarpig.com/iphone/uinavigationbar-with-solid-color-or-image-background.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2017-03-25
    • 2011-06-18
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多