我正在尝试实现一个UITableView,其行为与twitter客户端的时间轴类似.现在我只是想在UITableViewCell中获得两个标签.根据Stack Overflow的回答,我为每个布局使用了不同的reuseIdentifier.我的布局很简单,由单个标签或两个标签组成.最终我将调整UITableViewCells的高度,但首先我需要填充内容的单元格.
如果我设置框架initWithFrame:,我可以显示标签,但是约束没有实现.
问题:什么阻止标签和约束出现?我在UITableViewCell的实现中显然遗漏了一些东西,但我不知道它是什么.
次要问题:我是否为每个reuseIdentifier正确注册了UITableViewCell类viewDidLoad?
这可能会遇到困难,但Interface Builder会让我感到困惑,我想在代码中实现这一点.
以下是名为TVTCell.h的自定义UITableViewCell的代码:
static NSString * const kCellIDTitle = @"CellWithTitle";
static NSString * const kCellIDTitleMain = @"CellWithTitleMain";
@interface TVTCell : UITableViewCell
{
NSString *reuseID;
}
@property (nonatomic, strong) UILabel *nameLabel;
@property (nonatomic, strong) UILabel *mainLabel;
@end
Run Code Online (Sandbox Code Playgroud)
和TVTCell.m:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
reuseID = reuseIdentifier;
nameLabel = [[UILabel alloc] init];
[nameLabel setTextColor:[UIColor blackColor]];
[nameLabel setBackgroundColor:[UIColor colorWithHue:32 saturation:100 brightness:63 alpha:1]];
[nameLabel setFont:[UIFont …Run Code Online (Sandbox Code Playgroud) 我的视图层次结构如下所示:
当我尝试长按WebView中的链接时,我收到错误:
Warning: Attempt to present <WKActionSheet: 0x127520d10> on <PRSBaseViewController: 0x1275117f0> whose view is not in the window hierarchy!
而presentViewController:animated:completion不是使用addChildViewController:舞蹈来呈现导航,而是使用舞蹈将视图控制器添加到层次结构中.我没有错,这很奇怪.
有谁知道什么可能导致视图层次结构问题?
我继承NSTextStorage做一些链接高亮和我多读我可以对 话题.一切正常,直到我输入 emoji character.
private let ims = NSMutableAttributedString()
override var string: String {
return ims.string
}
override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject] {
return ims.attributesAtIndex(location, effectiveRange: range)
}
override func replaceCharactersInRange(range: NSRange, withString str: String) {
ims.replaceCharactersInRange(range, withString: str)
self.edited(.EditedCharacters, range: range, changeInLength:(str as NSString).length - range.length)
}
override func setAttributes(attrs: [String : AnyObject]?, range: NSRange) {
ims.setAttributes(attrs, range: range)
self.edited(.EditedAttributes, range: range, changeInLength: 0)
}
Run Code Online (Sandbox Code Playgroud)
Nothing complicated. …
objective-c ios nstextstorage nsmutableattributedstring swift
每次我的一个自定义UITableViewCells由tableView绘制时:cellForRowAtIndexPath:控制台吐出一堆NSLayoutConstraint不一致.我理解其中大部分内容:
Unable to simultaneously satisfy constraints. ...boring stuff..
"<NSLayoutConstraint:0x8b0eb60 V:|-(NSSpace(20))-[UILabel:0x8b0cb30] (Names: '|':UITableViewCellContentView:0x8bd7d40 )>",
"<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>",
"<NSLayoutConstraint:0x8b0dba0 V:[UITextView:0x91dba00]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x8bd7d40 )>",
"<NSLayoutConstraint:0x8b0d5a0 V:[UITextView:0x91dba00(1000)]>",
"<NSAutoresizingMaskLayoutConstraint:0x8b00330 h=--& v=--& V:[UITableViewCellContentView:0x8bd7d40(44)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>
Run Code Online (Sandbox Code Playgroud)
或者至少我认为我做到了.让我感到困惑的是我的UITableViewCell正在工作,似乎没有任何约束被打破.我认为错误中列出的一些约束,特别是最后一个约束,是系统添加的约束.如果我不使用.xibs并且只在代码中添加了约束,这可能吗?错误的最后一行特别突出,因为我动态生成每个代码的高度,但我注意到那里的44,默认的单元格高度.
是否默认添加了一些约束,例如我打电话时[super updateConstraints]?我将如何解决这些错误或找出它们的来源?
另外,我知道浸入Core Text比我的UITextView + Auto Layout解决方案要好得多.现在我正在努力缓存单元格高度.但是,这些布局错误是否会导致滚动时滞后,或者仅仅因为我使用自动布局来计算屏幕上显示的每个单元格高度?
我发布了在Github上发生这些错误的项目,如果有人想下载并体验自己的怪异.
我想使用Xcode 9 beta进行开发,但我似乎无法在Xcode 9中使用Swift 3.2获得正确的设置.编辑器比Xcode 8.3.2快得多
我可以(和有)下载的从swift.org夫特4工具链,并且可以从两个Xcode的8.3和Xcode的9测试中使用它.如果我想在Xcode 9正式发布之前发布我的应用程序,我可以在Swift 4中编写它,然后使用Swift 4工具链通过Xcode 8.3将其提交到App Store吗?
iOS 7有一个很棒的交互式动画,用于弹出UIViewControllers.通过从屏幕左侧滑动触发转换,但我想通过在视图控制器中的任意位置滑动来触发转换.(我也想从边缘取消那些,所以我可以将它们用于另一个自定义转换...).
到目前为止,在我的视图控制器中我添加了这个init.我知道这是错的,我不确定我在做什么.
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
panRecognizer.delegate = self.navigationController.interactivePopGestureRecognizer.delegate;
[self.view addGestureRecognizer:panRecognizer];
Run Code Online (Sandbox Code Playgroud)
如何将其与内置的interactivePopGestureRecognizer绑定?应该用我的handleGesture:方法吗?
编辑:在Apple的文档中,实际使用了tie这个词:
interactivePopGestureRecognizer
导航控制器在其视图上安装此手势识别器,并使用它将最顶层的视图控制器弹出导航堆栈.您可以使用此属性检索手势识别器,并将其与用户界面中其他手势识别器的行为联系起来.将手势识别器绑在一起时,请确保他们同时识别手势,以确保您的手势识别器有机会处理事件.
你如何与UIGestureRecognizers结合在一起?
ios ×6
objective-c ×3
autolayout ×2
swift ×2
uitableview ×2
app-store ×1
constraints ×1
ios7 ×1
iphone ×1
swift4 ×1
wkwebview ×1
xcode ×1