我正在开发一个使用今天小部件的应用程序,我需要显示一些近50行的表视图。但是屏幕只适合10行。所以我需要增加高度根据我的桌子高度小部件。我已经做了很多研究,说我无法完成。我已经看过雅虎股票应用程序,其中有#34;显示所有&#34 34;功能显示小部件上的所有股票,其高度超过屏幕高度。如果在某处做某事我为什么不能这样做?我尝试使用autolayout,设置" preferredContentSize"来设置todayviewcontroller视图高度的高度。我真的想知道我是否在某处做错了,或者它是不可能有小于屏幕高度的小部件高度。任何建议表示赞赏。 这是我的代码Todayviewcontroller.m
-(void)adjustWidgetHeight {
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.view
attribute:NSLayoutAttributeHeight
relatedBy:0
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:2140];
heightConstraint.priority = 999;
[self.view addConstraint:heightConstraint];
[self.view needsUpdateConstraints];
[self.view setNeedsLayout];
}
答案 0 :(得分:2)
高度可以动态改变,但我认为不可能达到超屏高度。
股票应用程序是一个预设的应用程序,所以也许可以做到。
在我检查了我的小部件演示代码后(我做了一些关于如何通过代码创建小部件的研究),我认为无法完成。
系统将添加一个精确的力量约束,精确地指望小部件面板(在Iphone 5& 5S中,它大约是441),即使我手动设置3000高度,它仍然限制在441。
你可以查看演示gif:
这是我的测试代码(我使用Masonry进行自动布局)
//
// TodayViewController.m
// widget
//
// Created by Ralph Li on 4/29/15.
// Copyright (c) 2015 LJC. All rights reserved.
//
#import "TodayViewController.h"
#import <NotificationCenter/NotificationCenter.h>
#import <Masonry/Masonry.h>
@interface TodayViewController () <NCWidgetProviding>
@property (strong, nonatomic) UIView *contentView;
@property (nonatomic, strong) UIButton *btnTest;
@end
@implementation TodayViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.contentView = [UIView new];
self.contentView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.contentView];
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
make.height.mas_equalTo(200).priorityHigh();
}];
self.btnTest = [UIButton buttonWithType:UIButtonTypeCustom];
[self.btnTest setTitle:[[NSDate date] description] forState:UIControlStateNormal];
self.btnTest.backgroundColor = [UIColor redColor];
[self.btnTest addTarget:self action:@selector(actionTest) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.btnTest];
[self.btnTest mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.contentView);
make.size.mas_equalTo(CGSizeMake(300, 40));
}];
}
- (void) actionTest
{
[self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(@(self.contentView.frame.size.height>250?200:3000)).priorityHigh();
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
completionHandler(NCUpdateResultNewData);
}
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
return UIEdgeInsetsZero;
}
@end