【问题标题】:How do I ensure my uiview is always a square?如何确保我的 uiview 始终是正方形?
【发布时间】:2013-08-02 23:11:24
【问题描述】:

我正在编写一个 uiview 子类,它必须显示在方形框架中才能正确格式化。

我如何编写 api 以便消费者只能请求一个正方形,并且它的框架的任何更改都会按比例发生?

或者在文档中让消费者知道该视图仅适用于方形框架就足够了吗?

【问题讨论】:

    标签: ios cocoa-touch uikit


    【解决方案1】:

    一种选择是覆盖自定义视图类中的setFrame: 方法:

    - (void)setFrame:(CGRect)frame {
        if (frame.size.width != frame.size.height) {
             // Update this logic to suit your needs
             frame.size.height = frame.size.width;
        }
    
        [super setFrame:frame];
    }
    

    【讨论】:

    • 谢谢。让用户设置框架不就是糟糕的设计吗?
    • 不,但是当他们做错事并且你自动更改时不告诉他们可能被认为是错误的实施。
    • @JasonC.Howlin 您问过如何制作方形视图,现在您质疑您的设计?这是否有效取决于它将如何使用。只有您可以决定您的需求是否不好。同样,这只是一种选择。另一个是让框架成为任何东西,而不是将内容呈现为正方形。决定方形内容是应该在框架中居中还是固定在某个角上。
    • 这就是我害怕的。所以记录一个警告,但还有什么?我觉得为帧大小抛出异常也很不寻常。
    • 您的需求不清楚。这是您的应用程序,您正在编写代码。谁会看到警告?当然不是您的应用程序的用户。此检查是否仅在开发期间进行?
    【解决方案2】:

    只需将框架设置为矩形

    [self.view setFrame:CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)
    [self.view setFrame:CGRectMake(100, 100, 100, 100)]
    

    或其任意倍数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 2018-12-25
      • 1970-01-01
      • 2015-07-06
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多