我无法使图像和按钮的角变圆

Posted

技术标签:

【中文标题】我无法使图像和按钮的角变圆【英文标题】:I can't make corners of images and buttons rounded 【发布时间】:2013-07-14 12:21:10 【问题描述】:

我正在创建 UITableViewController 的单元格。 其中一个包含一个小图像。我尝试了以下方法使其角变圆:

profileImage.layer.cornerRadius = 8;
profileImage.clipsToBounds = YES;

在另一个单元格原型中,我尝试将按钮的角做成圆形:

    chooseImageFromRoll.clipsToBounds = YES;
    chooseImageFromRoll.layer.cornerRadius = 8;

在这两种情况下我都包括了

#import <QuartzCore/QuartzCore.h>

必须圆角的按钮和图像是拥有它们的 UITableViewController 的属性:

#import <UIKit/UIKit.h>

@interface profileRegistrationCellVC : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *profileImage;
@property (weak, nonatomic) IBOutlet UIButton *chooseImageFromRoll;
@property (weak, nonatomic) IBOutlet UIButton *shootImage;

@end

在相对 .m 类中:

#import "profileRegistrationCellVC.h"
#import <QuartzCore/QuartzCore.h>

@implementation profileRegistrationCellVC
@synthesize profileImage;
@synthesize chooseImageFromRoll;
@synthesize shootImage;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code
        chooseImageFromRoll.clipsToBounds = YES;
        chooseImageFromRoll.layer.cornerRadius = 8;
        shootImage.layer.cornerRadius = 8;

        profileImage.layer.cornerRadius = 8;
        profileImage.clipsToBounds = YES;

        profileImage.layer.borderColor = [UIColor whiteColor].CGColor;
        profileImage.layer.borderWidth = 20.0;

        [self addSubview:profileImage];
        [self addSubview:chooseImageFromRoll];
        [self addSubview:shootImage];


    
    return self;


- (void)setSelected:(BOOL)selected animated:(BOOL)animated

    [super setSelected:selected animated:animated];

    // Configure the view for the selected state


@end

这是我的函数 cellForRowAtIndexPath 的代码,在我的 uitableviewcontroller 中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    if (indexPath.section == 0) 
        static NSString *CellIdentifier = @"profileRegistrationCell";

        profileRegistrationCellVC *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) 
            cell = [[profileRegistrationCellVC alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        

        //cell.profileImage.image.layer.masksToBounds = YES;
        //cell.profileImage.layer.cornerRadius = 5.0;

        return cell;

    

    else if (indexPath.section == 1) 
        static NSString *CellIdentifier = @"regularRegistrationCell";

        regularRegistrationCellVC *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) 
            cell = [[regularRegistrationCellVC alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        

        cell.regularFieldName.text = [_registrationItems objectAtIndex:indexPath.row];

        if ([[_registrationItems objectAtIndex:indexPath.row] isEqualToString:@"Email*"])
            cell.regularTextField.keyboardType = UIKeyboardTypeEmailAddress;

        if ([[_registrationItems objectAtIndex:indexPath.row] isEqualToString:@"Età"]) 
            cell.regularTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
        

        return cell;

    

    else
        static NSString *CellIdentifier = @"orientationRegistrationCell";

        orientationRegistrationCellVC *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) 
            cell = [[orientationRegistrationCellVC alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        

        cell.fieldLabel.text = [_registrationItems objectAtIndex:[_registrationItems count]-1];
        cell.orientationLabel.text = @"Non specificato";
        return cell;

    

但在任何情况下,我都没有设法使角落变圆。你能告诉我哪里错了吗?

谢谢

【问题讨论】:

请检查编辑后的答案。 我提供的代码首先是用于创建按钮,其次是用于圆角 uiimage。如果您在访问自定义单元格的 cellfprrowatindexpath 方法中使用蒙版并定义角半径,则它应该可以工作。只需在返回单元格之前在方法内添加掩码或半径方法。还请发布您的 cellforrowat 表格视图的索引路径,以便我可以看到您做了什么。 我编辑了我的帖子以添加 cellForRowAtIndexPath 代码。我忘了指定我必须舍入的按钮和图像是从情节提要中创建的。后者已经有背景颜色和标题,但我通过情节提要界面指定它们是自定义按钮。这一切会影响我的代码吗?我的代码是否无效?谢谢 此外:我试图从 UItablecell 控制器中对角和图像进行圆角处理,因为它是包含它们的单元格。我不知道在创建特定类型的单元格的 cellForRowAtIndexPath 中这样做是否更正确 我移动了用于舍入我的细胞的代码。它似乎工作。谢谢;) 【参考方案1】:

上面的代码 sn-ps 都是正确的,没有问题。我的假设是您的问题在于创建包含图像的按钮的其他地方。以下代码将创建一个按钮并将其圆角,我还添加了边框以防您也想添加它。您也可以插入其中的图像。我还添加了此代码将为您的参考创建的图像。希望对你有所帮助。

  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  btn.frame = CGRectMake(100, 100, 100,50);
  [btn setTitle:@"Hello" forState:UIControlStateNormal];
  [btn setBackgroundColor:[UIColor colorWithRed:128.0/255.0f green:0.0/255.0f  blue:0.0/255.0f alpha:0.7]];
   btn.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);//width and height should be same  value
   btn.clipsToBounds = YES;

   btn.layer.cornerRadius = 20;//half of the width
   btn.layer.borderColor=[UIColor redColor].CGColor;
   btn.layer.borderWidth=2.0f;

   [self.view addSubview:btn];

下面是上面代码相​​关的按钮图片

编辑:

做圆角的另一种方法是使用方法masksToBounds 这是模板开箱即用的通用单元格中的一个示例。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

NSDate *object = _objects[indexPath.row];
cell.textLabel.text = [object description];
cell.imageView.image = [UIImage imageNamed:@"acolon.png"];
cell.imageView.layer.masksToBounds = YES;
cell.imageView.layer.cornerRadius = 5.0;
return cell;

这是结果的屏幕截图:

我知道您使用的是自定义单元格,因此请在 cellForRowAtImdexPath 或您使用其自定义单元格填充 tableview 的任何位置实现 maskToBount

【讨论】:

感谢您回答图像和必须圆角的按钮是包含它们的 UITableViewCell 的属性。这有什么改变吗?我可以将您的代码创建的按钮分配给我作为属性的按钮吗?怎么样,在这种情况下?谢谢 我猜你的第一个代码块更适合我的需要。我复制粘贴了它,并尝试了两种不同的方法:首先,在你的代码结束后,我设置 chooseImageFromRoll = btn,其中 chooseImageFromRoll 是我的出口按钮。然后,我尝试用 chooseImageFromRoll 替换每次出现的 btn。没有解决办法

以上是关于我无法使图像和按钮的角变圆的主要内容,如果未能解决你的问题,请参考以下文章

如何使底部工作表对话框的角变圆? [复制]

ImageContext 返回扭曲的图像

带圆角的 FrameLayout

角不适用于android drawable中的环形

如何在颤动中创建具有圆形边缘的自定义容器?

QLineEdit 圆角?