我正在试验如何使用UIScrollView.经过多次麻烦,我终于掌握了它.但现在我似乎遇到了另一个障碍.
在这个简单的应用程序,我有一个滚动视图与和,以便它的工作,我必须设置视图的底部空间,所描述的滚动型约束,以0 在这里,它工作正常.我是通过IB做的.
现在我遇到了一个必须以编程方式完成该部分的场景.我在方法中添加了以下代码viewDidLoad
.
NSLayoutConstraint *bottomSpaceConstraint = [NSLayoutConstraint constraintWithItem:self.view
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.scrollView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
[self.view addConstraint:bottomSpaceConstraint];
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.它在控制台窗口中输出以下消息,我不知道该怎么做.
无法同时满足约束.可能至少下列列表中的一个约束是您不想要的约束.试试这个:(1)看看每个约束并试着找出你不期望的东西; (2)找到添加了不需要的约束或约束的代码并修复它.(注意:如果您看到了您不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性translatesAutoresizingMaskIntoConstraints的文档)("","")
有人可以告诉我该怎么做?我还在这里附加了一个演示项目,以便您可以更好地了解该问题.
更新:
首先感谢您的回复.使用答案中提到的方法,我能够使它工作.然而,它的情况略有不同.现在我正在尝试以编程方式将视图加载到viewcontroller.
如果我可以进一步解释.有2个视图控制器.第一个是a UITableViewController
和第二个a UIViewController
.里面那个UIScrollView
.还有多个UIView
s和一些视图的高度超过屏幕的正常高度.
在UITableViewController
显示选项列表.基于用户的选择,尤其是UIView
在大量的出将被装载到UIViewController
同UIScrollView
.
在这种情况下,上述方法不起作用.滚动没有发生.我是否必须做一些不同的事情,因为我是单独加载视图的?
objective-c uiscrollview uiviewcontroller ios nslayoutconstraint
我有一个项目都在Objective C中,除了我的视图控制器,它在Swift中.
当我运行它时,我得到错误
由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"..."笔尖,但未设置视图插座.
所以我打开了我的nib文件,查看"文件所有者",我发现视图根本不显示为插座.
对于我的旧视图控制器(目标c),视图插座会显示.
在我的Swift视图控制器中,我尝试从UIViewController覆盖"view"变量以强制它为@IBOutlet,但它抱怨UIView类型的"view"变量,抱怨UIView ?,并抱怨UIView !
这是简化版本
我的AppDelegate.h
#import <UIKit/UIKit.h>
@class MyViewController;
@class MyViewControllerSwift;
@interface MSAppDelegate : UIResponder <UIApplicationDelegate>
{
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController *viewController;
@end
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
#import "MyAppDelegate.h"
#import "MyViewController.h"
#import "MySwift-Swift.h"
#import <UIKit/UIKit.h>
@implementation MyAppDelegate
static BOOL USE_SWIFT_VIEW_CONTROLLER = YES;
- (void)dealloc
{
[_window release];
[_viewController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override …
Run Code Online (Sandbox Code Playgroud) 我在我的一个应用程序中遇到此错误,并在检查其他一些应用程序后发生同样的错误.我IBOutlets
和他们IBActions
都不再联系了.当我通过控制拖动到.h文件重新创建插座时,插座仍会在Connections Inspector> Outlets中显示错误,说(视图控制器)没有名为(子视图)的插座.在今天之前我没有这个问题,那么与Xcode 6有关吗?视图控制器引用Identity Inspector> Custom Class下的正确类.我删除了派生数据文件夹,删除了对.h文件的引用,清理了项目,并清理了构建文件夹.这些都没有奏效,在修复此问题之前,我无法继续开发.
更新:我刚刚重新开放的项目几天后,我的网点不再有其旁边的感叹号,而"EASYLABEL"出口,我断开再现了.我没有改变任何东西,所以我猜这是Xcode 6-6.1中的一个错误.
更新2:此错误又回来了.每个插座旁边都有惊叹号.如果我删除它们,我无法重新添加它们.无法创建新的网点.也不能给视图控制器一个自定义类.我真的只是想在应用程序上取得一些进展,但这个问题不断出现.真的好不能再忍受了.任何帮助,将不胜感激.
我正在使用Swift和Xcode 6.4来获得它的价值.
所以我有一个视图控制器,它将包含一些UILabels和UIImageViews.我想将UILabel-UIImageView对放入自定义UIView中,因此我可以在上述视图控制器中重复使用相同的结构.(我知道这可以翻译成UITableView,但为了〜学习〜请耐心等待我).事实证明,这是一个比我想象的更复杂的过程,我无法找到使这一切在IB工作的"正确"方法.
目前我一直在使用UIView子类和相应的XIB,重写init(frame :)和init(编码器),从nib加载视图并将其添加为子视图.这是我到目前为止在互联网上看到/阅读的内容.(这大概是这样的:http://iphonedev.tv/blog/2014/12/15/create-an-ibdesignable-uiview-subclass-with-code-from-an-xib-file-in-xcode-6) .
这给了我在init(编码器)和从bundle加载nib之间引起无限循环的问题.奇怪的是,这些文章或之前关于堆栈溢出的答案都没有提到这一点!
好的,我在init(编码器)中检查是否已经添加了子视图.这似乎是"解决了".但是当我尝试为它们分配值时,我开始遇到一个问题,我的自定义视图出口是零.
我做了一个didSet并添加了一个断点来看看...它们肯定是在某一点设置的,但是当我尝试修改标签的textColor时,该标签是零.我有点在这里撕扯我的头发.
可重用的组件看起来像软件设计101,但我觉得Apple正在密谋反对我.我应该在这里使用集装箱风险投资吗?我应该只是在我的主要VC中嵌套视图并拥有一个愚蠢的大量插座吗?为什么这么复杂?为什么每个人的例子都不适合我?
期望的结果(假装整个事情是VC,框是我想要的自定义uiviews):
谢谢阅读.
以下是我的自定义UIView子类.在我的主要故事板中,我将UIViews与子类设置为他们的类.
class StageCardView: UIView {
@IBOutlet weak private var stageLabel: UILabel! {
didSet {
NSLog("I will murder you %@", stageLabel)
}
}
@IBOutlet weak private var stageImage: UIImageView!
var stageName : String? {
didSet {
self.stageLabel.text = stageName
}
}
var imageName : String? {
didSet {
self.stageImage.image = UIImage(named: imageName!)
}
}
var textColor : UIColor? {
didSet {
self.stageLabel.textColor = textColor
} …
Run Code Online (Sandbox Code Playgroud) 我是iOS编程的新手,遇到了一个问题.
做了什么:
我创建了iOS应用程序.最初它有main.m,AppDelegate.h,AppDelegate.m和一些其他通常创建的支持文件(不带代码).
然后我用接口(LoginView.xib)手动创建了XIB文件,并手动添加了LoginViewController.h和LoginViewController.m来控制XIB.
为LoginViewController.h添加了插座.
毕竟我设置了文件的所有者类(LoginViewController)并在XIB和LoginViewController.h之间建立了连接.
问题描述:
我需要在应用程序启动时立即显示实例化登录视图控制器并显示登录视图.
我尝试了几次尝试并阅读了十几个论坛帖子,但没办法.除了白色窗口背景外没有显示任何内容.我该怎么做对吗?
参考代码:
LoginViewController.h
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController
{
IBOutlet UIView *_loginView;
IBOutlet UITextField *_tfLogin;
IBOutlet UITextField *_tfPassword;
IBOutlet UIButton *_btnLoginToSystem;
}
- (IBAction)attemptLogin:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
LoginViewController.m
#import "LoginViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- …
Run Code Online (Sandbox Code Playgroud) 我有一个名为TaskListViewController的类,我将使用ShowTaskViewController.在ShowTaskViewController的开头我没有一个视图对象我只有一个TableView对象,我从数据库动态加载数据,它工作正常.
现在我删除了ShowTaskViewController类中的TableView对象,我在.xib文件中拖放了一个View对象,并在其上面拖放了一个TableView对象,因为我想在该类中有一些额外的按钮,但现在它显示了我这个错误:由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"ShowTaskViewController"笔尖,但未设置视图插座.
这也就是我以前在ShowTaskViewController类运行之前使用的代码,现在请帮我进行更改,以便TableView对象正确加载数据.
-(IBAction)showAllTasks:(id)sender
{
ShowTaskViewController *showTaskViewController = [[ShowTaskViewController alloc] initWithNibName:@"ShowTaskViewController" bundle:nil];
[self presentModalViewController:showTaskViewController animated:YES];
}
Run Code Online (Sandbox Code Playgroud) 这几天我快要接近了,我有一个问题.
如果我必须以编程方式创建一个新的UIViewController怎么办?
使用空/新视图控制器很容易:
var controller: UIViewController = UIViewController()
controller.view.backgroundColor = UIColor.whiteColor()
self.presentViewController(controller, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
现在,我有一个我想在控制器上加载的xib文件:
var controller: UIViewController = UIViewController(nibName: "FeedDetail", bundle: nil)
controller.view.backgroundColor = UIColor.whiteColor()
self.presentViewController(controller, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
这次崩溃是因为:
'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "FeedDetail" nib but the view outlet was not set.'
Run Code Online (Sandbox Code Playgroud)
我已经阅读过这篇文章了,我无法理解错在哪里!
我创建了一个没有.xib文件的UIViewController子类,以为我不需要它.现在我意识到它会非常有用,但我不确定如何添加.xib文件.有人可以帮忙吗?
我收到此错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“BYZ-38-t0r-view-8bC-Xf-vdC”笔尖,但未设置视图插座。
这是我选择的网点栏:
我该如何解决这个问题?
我已经尝试了在这个问题上建议的解决方案,但到目前为止没有一个对我有用。
objective-c ×8
ios ×7
swift ×3
xib ×3
nib ×2
uiview ×2
appdelegate ×1
ios4 ×1
ios5 ×1
iphone ×1
uiscrollview ×1
xcode ×1