【问题标题】:Setting the frame of an UIView does not work设置 UIView 的框架不起作用
【发布时间】:2013-08-18 06:32:19
【问题描述】:

iOS 7 中的 frame-property 有问题。 我想在我的UIViewControllerviewDidLoad 方法中调整一些 UIViews 的大小,但如果我这样做就像int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)]; 高度设置为我想要的,直到方法结束,但在其他所有方法中,它都是以前的样子!

它有什么问题还是只是编译器的错误或其他什么?

【问题讨论】:

  • 你能澄清什么是错的吗?我不确定你的意思。
  • 是我的英文还是我怎么解释的? :D 所以,UIView 不会改变大小! NSLog 显示,其中有正确的值,但它只是直到方法结束!在编译器在 viewDidLoad 之后执行的所有其他方法中,它是旧值! ://
  • 尝试在viewDidLayoutSubviewsviewWillAppear 中设置UIViews 的框架。视图尚未在viewDidLoad 中布局。
  • 谢谢!几分钟前我尝试了 viewWillAppear,但它不起作用,但 viewDidLayoutSubviews 正在工作!谢谢! :)

标签: ios cocoa-touch ios7


【解决方案1】:

必须将视图调整大小放入-viewDidLayoutSubviews:(documentation)

将视图框架更改为-viewWillAppear:-viewDidLoad: 将不起作用,因为视图尚未布局!

【讨论】:

  • 谢谢。指望 Apple 一时兴起改变主意,并为自 1.0 版以来一直有效的极其基本的事情引入令人讨厌的行为变化。
  • 其实这也行不通。 viewDidLayoutSubviews 确实被调用了,并且帧值发生了变化,但图像仍然被拉伸,就像 initWithFrame: 在 vi​​ewWillAppear 中一样。使用此代码。 CGRect frame=self.navigationItem.titleView.frame;框架.尺寸.宽度=102;框架.尺寸.高度=44; self.navigationItem.titleView.frame=frame;
  • 只是一个注释。 iOS7 和 iOS8 的行为不同。在 iOS7 上更改子视图的框架会触发 layoutSubview,在 iOS8 上不会发生。
  • 只有这个答案对我有帮助
【解决方案2】:
  • 检查您是否在 xib 文件中使用 autolayout。如果您不想使用autolayout,请在您的 xib 文件中取消选中它。

  • -viewWillAppear: 中更改您的self.leftSideTableView 框架。

【讨论】:

    【解决方案3】:

    检查以确保您的故事板文件中没有激活自动布局。

    要关闭它,请查看界面生成器中的检查器。单击左侧看起来像页面的图标。在“界面生成器文档”部分中,取消选中“使用自动布局”。

    我发现最好在 IB 中使用自动布局的整个视图控制器,或者完全在代码中。将两者混合会导致难以调试的奇怪行为。

    【讨论】:

    • 伙计,我为此头疼了好几个小时(捂脸)。谢谢!
    【解决方案4】:

    发生这种情况的原因有多种。首先,您需要确保您的 tableview 不是 nil。如果您以编程方式创建它,则需要确保在尝试设置框架之前在某处调用 alloc/init。如果self.leftSideTableView 是一个IBOutlet,这可能是由于忘记将出口实际链接到接口对象造成的。

    然后,第二个不太可能的是,您正在以编程方式创建表格视图并正确初始化它,但您忘记将其添加为您的屏幕视图之一的子视图。

    【讨论】:

    • TableView 是在 nib 中创建并链接的,现在我想调整它的大小!我也在屏幕上看到它,它被正确填充了,但我无法改变高度!
    • @MyJBMe 你在使用 UITableViewController 的子类吗?
    • 不,它是一个普通的 UITableView!但是@bobnoble 刚刚带来了答案!我无法更改 viewDidLoad 中的大小 - 即使我可以设置阴影 - 但我可以在 viewDidLayoutSubviews 中设置! viewWillAppear 也没有成功!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多