【问题标题】:xcode objective-c warningsxcode 目标 c 警告
【发布时间】:2009-07-20 03:33:18
【问题描述】:

我对 Objective-c 比较陌生...我正在使用 iphone 3.0 SDK

我有一个 UIView,它是一个子视图,我想在某些情况下调整它的大小。

我这样做的方式是在控制器类中。

例如,

CGSize el = CGSizeMake(30, 40);
[self.subview setSize:el];

上面的代码确实可以工作,但是编译器会给出警告:'UIView' may not respond to 'setSize:'

在某种程度上,“如果它没有坏,我不想修复它”,但我有点担心我做错了什么。

关于我收到警告的原因以及如何解决它的任何想法?

TIA

【问题讨论】:

    标签: iphone objective-c xcode uiview compiler-warnings


    【解决方案1】:

    这可能意味着UIViewsetSize 已实现,但未显示在导入项目的头文件中。这使它成为一个未记录的 API,即有一天它可能会改变和破坏你的代码:)

    如果您查看 UIView 的文档,您肯定会发现对 size 属性没有任何参考。所以我会避免它。

    您应该改用frame 属性

    CGSize el = CGSizeMake(30, 40);
    CGRect bounds = CGself.subview.bounds;
    bounds.size = el;
    CGself.subview.bounds = bounds;
    

    试一试。

    【讨论】:

    • frame 方法按值返回帧,所以不能这样设置它的大小。你需要做类似CGRect frame = self.subview.frame; frame.size = CGSizeMake(30, 40); self.subview.frame = frame;的事情。
    【解决方案2】:

    正确的做法是使用其他东西而不是非公开的size 属性。但为了便于讨论:如果您想摆脱警告,您可以在实现文件顶部的某处声明您知道 size 属性:

    #import "MyClass.h"
    
    @interface UIView (private)
    - (void) setSize: (CGSize) newSize;
    @end
    
    @implementation MyClass
    …
    @end
    

    编译器将停止抱怨。

    【讨论】:

      【解决方案3】:

      下面是使用“myView”的“frame”属性更详细的解释:

      [self.myView.frame = CGRectMake(x, y, width, height)];
      

      地点:

      • x,坐标为您的视图的左上角,具有 参考其父“x”坐标的左上角。
      • 是的,相同 作为 x 但 y 轴
      • 宽度,框架的水平尺寸
      • 框架的高度、垂直尺寸

      即您有一个适合屏幕边界的视图,因此它的坐标 (0,0) 将与您的设备屏幕左上角相同。 如果你想添加一个略小于屏幕尺寸的子视图并将其水平和垂直居中,这里是设置:

      [self.myView.frame = CGRMake ( 20 , 20 , self.view.frame.size.width-40, self.view.frame.size.height-40);
      

      此示例将框架设置在视图内并居中。请注意,我们将对应的宽度减去 40:左侧 20,右侧 20,垂直调整也是如此。

      此代码也适用于纵向和横向模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 2020-11-13
        • 2017-02-01
        • 1970-01-01
        • 2012-06-03
        相关资源
        最近更新 更多