如何以编程方式更改视图大小?

Posted

技术标签:

【中文标题】如何以编程方式更改视图大小?【英文标题】:How to change View size programmatically? 【发布时间】:2014-05-08 08:16:38 【问题描述】:

*** 中关于这个主题的问题很少。但是没有一个解决方案对我有用。

当用户单击表格视图的行时,我需要显示弹出窗口。同样,此弹出窗口应包含tableView。由于 Apple 建议不在 alertView 中使用tableView,因此,我需要使用尺寸较小的普通UIView

UIView 是使用storyboard 绘制的。

以编程方式,我正在尝试使用以下代码来减小大小。

- (void)viewDidLoad

    [super viewDidLoad];

    CGRect newFrame = self.view.frame;

    newFrame.size.width = 200;

    newFrame.size.height = 200;

    [self.view setFrame:newFrame];

但它不起作用。

【问题讨论】:

【参考方案1】:

CGRect 不仅是宽度和高度,它也是 x 和 y。 这样做:

CGRect newFrame = CGRectMake( self.view.frame.origin.x, self.view.frame.origin.y, 200, 200);

self.view.frame = newFrame;

这只会影响宽度和高度。

【讨论】:

结构 CGRect 中没有成员 'x' 或 'y'。而self.view.frame.size.height = self.view.frame.width = 200;不是可赋值的表达式。 感谢@Audumbar,我删除了第二种方法,因为它在 Objective-C 中是不可能的。 @BenjaminHerzog 我注意到这仅在我将其添加到 ViewDidAppear 时才对我有效。有没有办法在它出现之前更改我的框架我在 ViewDidLoad 和 ViewWillAppear 中尝试过但没有工作。 @LianvanderVyver 也应该在 viewDidLoad 中工作。也许之后会改变?【参考方案2】:

您尝试修改的视图可能是通过情节提要附加到UIViewController 的视图,您将无法修改该视图,请尝试使用情节提要或以编程方式创建另一个视图。

【讨论】:

【参考方案3】:

由于您的要求是显示一个弹出窗口,我建议您如果它的 iPAD 则继续使用 UIPopoverController 如果它的 iPhone 则只需创建一个新的全屏具有透明背景(清晰背景)的 UIView,然后再创建一个具有新框架的 UIView,并确保框架大小在中间并附加它(添加子视图)。

您正在执行的程序也不起作用。创建一个新的 UIView 并更改框架,然后将 subView 附加或添加到您的主视图

这将解决您的问题。

【讨论】:

【参考方案4】:

我认为您正在寻找带有 tableView 的 UIPopOverController..

参考本教程

http://www.raywenderlich.com/29472/ipad-for-iphone-developers-101-in-ios-6-uipopovercontroller-tutorial

【讨论】:

以上是关于如何以编程方式更改视图大小?的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不使用自动布局滚动(内容视图框架大小以编程方式更改)

如何以编程方式为其父视图添加视图大小?

以编程方式更改表的大小

如何以编程方式调整自定义视图的大小?

如何在 Android 中以编程方式更改按钮大小?

如何在 Swift 中以编程方式更改 UICollectionViewCell 大小?