Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iPad uiview帧在initWithFrame之后立即更改_Iphone_Ipad_Uiview_Size_Frame - Fatal编程技术网

Iphone iPad uiview帧在initWithFrame之后立即更改

Iphone iPad uiview帧在initWithFrame之后立即更改,iphone,ipad,uiview,size,frame,Iphone,Ipad,Uiview,Size,Frame,好的,我有一个非常基本的应用程序,里面有一个视图,只需一个按钮。我已将控制器设置为仅允许横向。我的问题是,在初始化之后,然后单击我的按钮(它只有一个log语句),这与我在init末尾的log语句不同 我在模拟器上以横向模式启动应用程序(但在设备上的结果相同)。就像我分配它之后,它就切换回来了。我尝试了以下语句self.frame=CGRectMake(0,0,1024768)在我的ButtonClick方法中,但这只是扭曲和移动了它 - (id)initWithFrame:(CGRect)fra

好的,我有一个非常基本的应用程序,里面有一个视图,只需一个按钮。我已将控制器设置为仅允许横向。我的问题是,在初始化之后,然后单击我的按钮(它只有一个log语句),这与我在init末尾的log语句不同

我在模拟器上以横向模式启动应用程序(但在设备上的结果相同)。就像我分配它之后,它就切换回来了。我尝试了以下语句
self.frame=CGRectMake(0,0,1024768)
在我的ButtonClick方法中,但这只是扭曲和移动了它

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
    //BUTTONS
    attributesButton = [UIButton buttonWithType:UIButtonTypeCustom];
    attributesButton.frame = CGRectMake(self.frame.size.width - buttonPadding - 35, self.frame.size.height/2 -22 -150, 35, 35);
    [attributesButton setBackgroundImage:[UIImage imageNamed:@"loadIcon.png"] forState:UIControlStateNormal];
    [attributesButton addTarget:self action:@selector(attributesButtonClicked) 
               forControlEvents:UIControlEventTouchUpInside];
    [attributesButton setTitle:@"Attr" forState:UIControlStateNormal];
    [self addSubview:attributesButton];
    NSLog(@"Width: %f",self.frame.size.width);
    NSLog(@"Height: %f",self.frame.size.height);
    }
    return self;
}

-(void)attributesButtonClicked
{
    NSLog(@"Width: %f",self.frame.size.width);
    NSLog(@"Height: %f",self.frame.size.height);
}
这就是我的初衷。对不起,看起来很糟糕,我不知道为什么。我的视图控制器:

    - (void)loadView 
{
    NSLog(@"myViewController: loadView");

    myView = [[myView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];

    self.view = myView;

}
现在这是让我明白的部分,日志语句

2010-08-27 15:16:55.242 tester[8703:40b] myViewController: loadView
2010-08-27 15:16:55.262 tester[8703:40b] Width: 1024.000000
2010-08-27 15:16:55.262 tester[8703:40b] Height: 768.000000
CLICK MY BUTTON HERE
2010-08-27 15:17:05.689 tester[8703:40b] Width: 748.000000
2010-08-27 15:17:05.689 tester[8703:40b] Height: 1024.000000

如果您的视图绑定到其中一个标准视图控制器(UINavigationController、uitabarcontroller等),则无论您在initWithFrame中指定了什么,控制器都将在运行时更新帧大小


这实际上是一件好事,因为您不必担心方向、工具栏占用空间等问题。

如果您的视图绑定到一个标准视图控制器(UINavigationController、uitabarcontroller等),则控制器将在运行时更新帧大小,无论您在initWithFrame中指定了什么


这实际上是一件好事,因为您不必担心方向、工具栏占用空间等问题。

这可能是因为在将视图添加为子视图时,父视图正在自动调整视图的大小。 如果您不希望发生这种情况(尽管您通常会在全屏视图中这样做),您可以将
自动ResizingMask
设置为
UIViewAutoResizingOne

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        ...
        self.autoresizingMask = UIViewAutoresizingNone;
    }
    return self;
}

编辑:好的,对不起,我刚刚记得UIViewAutoResizingName实际上是autoresizingMask的默认值,所以在初始化期间将其设置为该值实际上不会改变任何东西。但关键是,当您将视图添加为子视图时,超级视图会更改框架。

这可能是因为当您将视图添加为子视图时,父视图会自动调整视图的大小。 如果您不希望发生这种情况(尽管您通常会在全屏视图中这样做),您可以将
自动ResizingMask
设置为
UIViewAutoResizingOne

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        ...
        self.autoresizingMask = UIViewAutoresizingNone;
    }
    return self;
}

编辑:好的,对不起,我刚刚记得UIViewAutoResizingName实际上是autoresizingMask的默认值,所以在初始化期间将其设置为该值实际上不会改变任何东西。但关键是,当您将视图添加为子视图时,超级视图会更改帧。

根据我的经验,即使您处于横向模式,如果您使用自动调整大小遮罩,则在使用initWithFrame初始化视图时需要使用“纵向”帧:

尝试:


根据我的经验,即使您处于横向模式,如果您使用自动调整大小遮罩,在使用initWithFrame初始化视图时也需要使用“纵向”帧:

尝试:


那没用。谢谢你的想法。如果我在横向视图中,为什么要调整纵向视图的大小?我没有添加子视图,我只是将self.view设置为myView。当我尝试添加子视图时,我没有得到任何结果(因为我的视图为零)。是的,但是其他一些对象(可能是应用程序委托?)将获取该视图并将其作为子视图添加到其他一些视图(可能是主应用程序窗口),否则您将根本看不到它,对吗?那是改变画面的时候,那没用。谢谢你的想法。如果我在横向视图中,为什么要调整纵向视图的大小?我没有添加子视图,我只是将self.view设置为myView。当我尝试添加子视图时,我没有得到任何结果(因为我的视图为零)。是的,但是其他一些对象(可能是应用程序委托?)将获取该视图并将其作为子视图添加到其他一些视图(可能是主应用程序窗口),否则您将根本看不到它,对吗?此时帧被更改。我的视图未绑定到标准控制器的和。只是:@interface myViewController:UIViewControllerIt不必直接绑定到标准视图控制器。您的“myViewController”可能用于UINavigationController或UITableController。这将为您提供相同的行为我的观点与标准控制器无关。只是:@interface myViewController:UIViewControllerIt不必直接绑定到标准视图控制器。您的“myViewController”可能用于UINavigationController或UITableController。这会给你同样的行为