【问题标题】:Getting UIButton width before viewDidAppear, with AutoLayout使用 AutoLayout 在 vi​​ewDidAppear 之前获取 UIButton 宽度
【发布时间】:2015-11-30 21:41:33
【问题描述】:

我有一个 UIButton(在界面生成器中创建),我通过设置 button.layer.borderRadius = button.frame.size.width / 2.0;(以编程方式,在 viewDidAppear 中:)将其变成一个圆圈。但是,它所属的 viewController 以动画形式呈现。由于viewDidAppear 直到过渡动画完成后才被调用,所以在此之前按钮是方形的,这使得突然的变化非常刺耳。

我无法在viewDidLoad 中设置半径,因为按钮属性不正确(宽度太大),我认为这是因为尚未正确解决自动布局约束。我试图通过在viewDidLoad 中调用[self.view setNeedsLayout] 来纠正此问题,然后设置cornerRadius,但按钮宽度仍然错误。我不明白的是,在动画期间,一切都正确渲染,表明自动布局约束/已经/已解决,或者 iOS 以快速动画的名义做了其他事情(比如存储快照预览以用于动画)。

有什么建议吗?

在viewDidLoad中尝试设置圆角半径的结果:

【问题讨论】:

    标签: ios objective-c uibutton autolayout


    【解决方案1】:

    对不起,我没有让你好起来。正如您的屏幕截图所解释的那样,您的图像不是圆形的。为此,您可以尝试:(1) layer.cornerRadius = btn.frame.size.width/2;或 layer.CornerRadius = 50(如果宽度为 100)

     layer.masksToBounds = YES;
    
     layer.borderWidth = 1.5; or whatever you want
    
     layer.borderColor = [UIColor whiteColor];
    

    如果您仍然遇到问题,请分享您在按钮上添加的约束以及您正在执行此操作的代码。

    【讨论】:

      【解决方案2】:

      覆盖UIButton 并使其layoutSubviews 方法如下:

      - (void)layoutSubviews {
          [super layoutSubviews];
          self.layer.cornerRadius = self.bounds.size.width/2.f;
      }
      

      然后,每当按钮的大小发生变化时,它都会调整其值。 还要将它添加到 buttonWithType:initWithFrame: 中,因为我不确定是否在 init 之后调用了 layoutSubviews

      【讨论】:

      • 我接受了最佳答案,因为它更直接地回答了我提出的问题,但对于我的情况,这是我认为更好的解决方案。非常感谢。
      • 这仅在按钮为方形时有效。在调用sizeToFit() 使其具有有意义的大小后,它通常是矩形...
      【解决方案3】:

      怎么样

      -(void) viewWillAppear:(BOOL)animated
      

      【讨论】:

        【解决方案4】:

        您的控件在 viewDidLoad 和 viewDidLoad 之后获得约束和框架集,您可以在 viewwilllayoutsubviews 或 viewDidAppear 之前的 viewdidlayoutsubviews 中获得您的要求

        【讨论】:

          【解决方案5】:

          您可以在函数 - viewDidLayoutSubviews 中获取宽度。

          Apple Documentation 在这里。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-10
            • 2016-01-09
            • 2012-09-13
            • 1970-01-01
            • 2014-12-10
            • 2018-02-19
            • 2014-11-21
            • 2018-03-16
            相关资源
            最近更新 更多