UIAlertController带有方形(非圆角)边角

3

是否有可能使UIAlertController拥有方形角而不是默认的圆角?

(我知道可以使用第三方库实现,但我想知道如何使用苹果的UIAlertController实现。)


@soulshined 给了你一个很好的答案。他提供的引用在 Xcode 的 UIAlertController 类参考的第一个屏幕上。在发布问题之前,你有阅读文档吗? - Duncan C
3个回答

7
实际上,你可以通过简单的遍历来改变cornerRadius:
extension UIView {
    func traverseRadius(_ radius: Float) {
        layer.cornerRadius = CGFloat(radius)

        for subview: UIView in subviews {
            subview.traverseRadius(radius)
        }
    }
}

您可以使用以下方式展示警告控制器:
let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
alertController.view.traverseRadius(0)
self.present(alertController, animated: true, completion: nil)

Objective C中的同样内容:

// UIView+TraverseRadius.h
#import <UIKit/UIKit.h>

@interface UIView (TraverseRadius)
- (void)traverseRadius:(CGFloat)radius;
@end


// UIView+TraverseRadius.m
#import "UIView+TraverseRadius.h"

@implementation UIView (TraverseRadius)

- (void)traverseRadius:(CGFloat)radius {
    [self.layer setValue:@(radius) forKey:@"cornerRadius"];

    for (UIView *subview in self.subviews) {
        [subview traverseRadius:radius];
    }
}
@end

请包含头文件并在实现中使用以下内容:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
[alertController.view traverseRadius:0];    
[self presentViewController:alertController animated:YES completion:nil];

您将获得完美的正方形 UIAlertController:

正方形 Alert View Controller

此代码在未来的iOS版本中不会崩溃,因为cornerRadius是每个UIView层的标准属性,您没有使用任何私有方法或属性来实现此目的。


6
简而言之,目前苹果没有提供官方API方法来自定义UIAlertController的样式。在此情况下进行更改可能会导致被拒绝,因为这不符合他们的指南:

UIAlertController类旨在按原样使用,不支持子类化。该类的视图层次结构是私有的,不能修改。

请参阅此处了解详情

1
好的回答。清晰、简洁,而且有来自文档的支持引用。(已投票) - Duncan C

4
当添加了这行代码后,警告框的角变成了正方形。myAlert.view.backgroundColor = [UIColor whiteColor];

这并不是把角落变成正方形,而是让背景可见。 - allenh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接