运行应用程序时,在IB中添加的UILabel和其他元素是错误的

时间:2012-11-27 02:04:12

标签: iphone objective-c xcode

我在MainViewController中将InfoViewController的视图加载为- (void)viewDidLoad { [super viewDidLoad]; infoViewController = [[InfoViewController alloc] initWithNibName:@"InfoViewController" bundle:nil]; mainInfoView = (MainInfoView *)[mainInfoViewController view]; } 中的子视图(在.h中声明):

InfoViewController

(MainViewController从tableviewcontroller单元格的segue推出,并有一个导航栏。)

这是在- (void)viewDidLoad { [super viewDidLoad]; self.view.frame = CGRectMake(130, 0, 178, 299); } 的viewDidLoad中设置视图的大小:

InfoViewController

在InfoViewController的“大小”检查器中,我设置了相同的大小(使用:178,高度:299)。 我为XIB中的InfoViewController和Storyboard中的MainViewController禁用了“Use Autolayout”。

我在MainViewController中有一些UILabel,UITextViews和UIImageViews。它们以.h中的属性声明并以.m合成。并连接到XIB中的元素。它们的内容在- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; infoViewController.kategoriLabel.text = [[objArr objectAtIndex:detailIndex] objectForKey:@"Type"]; } 的viewWillAppear中定义,如下所示:

{{1}}

当我运行应用程序并输入此视图时,某些标签,图像和textView会突然显示在看似随机的位置。这只发生在一些元素上。

我在另一个应用程序中做了同样的事情,它在模拟器(iPhone 4版本6,0)和iPhone 5设备上都能正常工作,但是在这个应用程序中,两者都很混乱。 当我比较应用程序时,我似乎无法在Utilities或其他任何地方找到任何不同的东西。

如果您经历过类似的事情并解决了它,或者您可能知道可能导致它的原因,我将非常感谢您的回答。感谢。

PS。我正在使用Xcode 4.5.1

1 个答案:

答案 0 :(得分:2)

我有一个不同的问题,但我的蛮力解决方案也可能对你有用。就我而言,我想在一系列视图控制器中禁用最终项目上的导航栏。但是,IB不允许您删除导航栏,因此我必须在viewWillAppear中手动执行此操作。然而,一旦栏被隐藏,IOS将我在IB中定义的所有按钮和对象移动到(现在隐藏的)导航栏的高度。

我在Controller的viewWillAppear中使用了以下内容。 (当我在viewWillAppear中尝试这个时,对象往往会明显移动)

-(void) viewWillAppear:(BOOL)animated
{
    //turn off nav bar
    [[self navigationController]setNavigationBarHidden:YES animated:NO];

    //correct positions of items that shift when the bar disappears
    myThing.center = CGPointMake(desired_x_coord, desired_y_coord);
    myOtherThing.center = CGPointMake(desired_x_coord2, desired_y_coord2);
    ...etc...

    //don't forget to call the base class
    [super viewWillAppear:animated];
}

烦人,但工作。如果找不到移动对象的来源,可以尝试使用viewWillAppear强制移动它们的位置。