代码之家  ›  专栏  ›  技术社区  ›  Austin Berenyi

为什么我用的UIButton的高度没有变化?

  •  1
  • Austin Berenyi  · 技术社区  · 6 年前

    我正在创建一个按钮并将其添加为 UIBarButtonItem 在下面的代码中。我想把它做成一个完美的圆圈。

    UIButton *hasMessageBtn = [UIButton alloc];
    hasMessageBtn.backgroundColor = [UIColor orangeColor];
    hasMessageBtn.layer.frame = CGRectMake(0, 0, 24, 24);
    hasMessageBtn.layer.cornerRadius = 12;
    
    [hasMessageBtn addTarget:self action:@selector(openMessages:) forControlEvents:UIControlEventTouchUpInside];
    
    UIBarButtonItem *messages = [[UIBarButtonItem alloc] initWithCustomView:hasMessageBtn];
    
    self.navigationItem.leftBarButtonItem = messages;
    

    不过,看起来这个尺寸在两个方面是错误的。高度永远不会改变,甚至当我改变宽度值时宽度也会改变,这似乎是不正确的,因为设置角半径,

    hasMessageBtn.layer.cornerRadius = 12; 
    

    不会完全闭合顶部和底部的圆角。我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ankit Jayaswal    6 年前

    当您采用较小的自定义视图默认大小时,其高度将拉伸到 34 .这就是为什么你 leftBarButton 正在变形。

    解决方案:

    1. 将高度和宽度约束应用于 barButton (建议*)

      UIBarButtonItem *messages = [[UIBarButtonItem alloc] initWithCustomView:hasMessageBtn];
      
      [NSLayoutConstraint activateConstraints:@[[messages.customView.widthAnchor constraintEqualToConstant:24.0], [messages.customView.widthAnchor constraintEqualToConstant:24.0]]];
      
    2. 设置自定义视图的按钮大小, CGSize(34, 34)

      hasMessageBtn.layer.frame = CGRectMake(0, 0, 34, 34);
      
      hasMessageBtn.layer.cornerRadius = hasMessageBtn.frame.size.height / 2;
      
        2
  •  1
  •   Pablo Marrufo    6 年前

    从iOS 11开始,必须为条形按钮项目设置约束。以下是objective-c中的外观:

    [hasMessageBtn.widthAnchor constraintEqualToConstant:24].active = YES;
    [hasMessageBtn.heightAnchor constraintEqualToConstant:24].active = YES;
    

    并以swift:

    hasMessageBtn.heightAnchor.constraint(equalToConstant: 24).isActive = true
    hasMessageBtn.widthAnchor.constraint(equalToConstant: 24).isActive = true
    

    如果您对此主题有更多疑问,我建议您观看2017年WWDC视频 Updating Your App for iOS 11