小编nac*_*oss的帖子

无法在viewDidAppear之前正确设置框架

我想知道是否有人知道为什么当你设置子视图的框架viewDidLoad并且viewWillAppear更改不会影响屏幕,但如果你设置viewDidAppear它们呢?

在我的情况下,我正在加载一个带有两个tableviews的自定义xib,然后尝试将它们向下移动viewDidLoad以允许添加另一个视图的空间,viewDidLoad因为它并不总是需要显示它.

问题是当我设置框架viewDidLoadviewWillAppear在对象上设置框架时,我可以看到它打印出来,但它没有反映在屏幕上.移动我的设置框架调用viewDidAppear将导致一切按预期工作.

认为我应该能够设置框架是错误的viewDidLoad吗?

- (id)init {
    if ( self = [super initWithNibName:@"MyView" bundle:nil] ) {}

    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.descriptionWebView = [[[UIWebView alloc] initWithFrame:CGRectMake( 0, 0, self.view.frame.size.width, 200 )] autorelease];

    [self.view addSubview:self.descriptionWebView];

    self.tableView1.autoresizingMask = UIViewAutoresizingNone;
    self.tableView2.autoresizingMask = UIViewAutoresizingNone;

    [self.descriptionWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"...." withExtension:@"html"]]];

    table1LocationWithHeader = CGRectMake( self.tableView1.frame.origin.x, 200, self.tableView1.frame.size.width, self.tableView1.frame.size.height - 200 );
    table2LocationWithHeader = CGRectMake( …
Run Code Online (Sandbox Code Playgroud)

objective-c uiview viewdidload viewdidappear ios

41
推荐指数
1
解决办法
3万
查看次数

如何以编程方式将OS X"标签"添加到文件中?

自Mavericks以来,OS X已经能够在Finder中标记和着色文件.

查找器标签

有没有办法通过Cocoa API或shell命令向文件添加标签?

macos cocoa metadata command-line-tool

27
推荐指数
4
解决办法
2万
查看次数

解释ReactiveCocoa/libextobjc中的弱化和强化工作方式

我知道你应该使用@weakify @strongify来避免保留周期,但我不完全理解它们是如何实现这一目的的?

reactive-cocoa libextobjc

22
推荐指数
2
解决办法
8013
查看次数

检测对象是否完全是特定类型,而不是swift中该类型的子类

在swift中,您可以使用类似于以下内容的方法检查对象是否属于特定类型

let object: AnyObject = someOtherObject
if object is SKNode {
   //is SKNode
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SKShapeNode和SKSpriteNode也会满足这个条件,因为它们是SKNode的子类.

检测对象是否属于特定类型而不是该类型的子类的标准方法是什么?

types conditional-statements swift

9
推荐指数
2
解决办法
2128
查看次数

为什么在Anyift中将结构转换为AnyObject而不是编译错误?

下面的代码编译并在swift中工作.

struct TestStruct {
    let value: String = "asdf"
}

func iWantAReferenceType(object: AnyObject) {
    print(String(describing: object))
}

let o: TestStruct = TestStruct()

iWantAReferenceType(object: o as AnyObject)
Run Code Online (Sandbox Code Playgroud)

我希望这是一个编译错误,因为结构永远不能符合AnyObject.如下所示,代码无法编译.

protocol Test: AnyObject {

}

//Compile error: because a struct cannot be AnyObject
struct TestStruct: Test {
    let value: String = "asdf"
}
Run Code Online (Sandbox Code Playgroud)

我知道某些类型(例如String)可能会出现一些桥接.这将转换引用类型的值类型.

print(Mirror(reflecting: "asdf").subjectType) //print: String
print(Mirror(reflecting: "asdf" as AnyObject).subjectType) //print: NSTaggedPointerString
Run Code Online (Sandbox Code Playgroud)

在写这个问题的时候,我想看看铸造物体的类型是什么,似乎它也在某种程度上被桥接了.

print(Mirror(reflecting: o).subjectType) //prints: TestStruct
print(Mirror(reflecting: o as AnyObject).subjectType) //prints: _SwiftValue
Run Code Online (Sandbox Code Playgroud)

为什么允许这种类型的铸造?它似乎打破了期望引用类型的函数的合约.

我在重构一些代码以支持值类型时偶然发现了这一点,令我惊讶的是它已经为值类型工作了,即使我认为它不会.依赖这种行为是否安全?

casting swift

6
推荐指数
1
解决办法
81
查看次数

从界面构建器设置子选项卡栏控制器的导航栏标题

我有一个具有以下布局的情节提要。

  1. TabBarController
  2. -> NavigationController
  3. ----> TableViewController
  4. ----> TableViewController
  5. ----> TabBarController(在推送时隐藏底部栏)
  6. ------> TableViewContrller(设置标题)

我将4和5推到导航控制器2上。5按下并隐藏6时,它会隐藏底部的栏,因为选中了选项卡栏项,则视图控制器6上设置的标题在导航栏中不可见

我的问题是,从接口构建器(XCode5)进行设置的最佳方法是什么?

我还尝试添加导航项以查看控制器6并在那里设置标题,但这没有任何效果。

在撰写本文时,我意识到视图控制器6永远不会被推入导航控制器堆栈,这就是为什么它没有导航项的原因。当我意识到在视图控制器3上设置导航项会产生预期的效果时,我将放弃这个问题。当切换到不同的选项卡时,可以切换导航栏标题。

当然,这是因为它们是完全不同的导航控制器。无论如何,我可以通过结构来模拟这种行为吗?如果不能,您是否可以建议替代方法?

objective-c uitabbarcontroller uinavigationcontroller ios uistoryboard

1
推荐指数
1
解决办法
1757
查看次数