我在webView
下的简单应用程序中有一个UIImageView
。我打算显示UIImageView
,直到webView加载一些数据并在Web视图委托中触发方法。 Webview加载数据,委托方法称为精细。但是,我无法操纵UIImageView
等其他视图。
这是我的代码;
class ViewController: UIViewController,UIWebViewDelegate {
//contains the imageView and activityWorkingIndicator
@IBOutlet weak var splash_view: UIView!
@IBOutlet var contentWebView: UIWebView!
//Contains the Webview and other views to be displayed after the splash his hidden
@IBOutlet weak var splash_view_not: UIView!
override func viewWillAppear(animated: Bool)
{
contentWebView?.scrollView.bounces = false;
contentWebView?.delegate = self
let url = NSURL(string: "http://localhost/something/");
let request = NSURLRequest(URL: url!);
contentWebView?.loadRequest(request);
}
....
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if let scheme = request.URL?.scheme {
if scheme == "myRequestScheme"{
let task : String = (request.URL?.host)!;
switch task {
case "systemReady":
print("checkpoint 1");//works fine
splash_view?.hidden = true;//no effect at all
splash_view_not?.hidden = false;//no effect at all
print("checkpoint 2");//works fine
break;
default:
break
}
}
}
return true;
}
}
我在这里缺少什么?
答案 0 :(得分:0)
看起来您正在使用自动布局。如果是这种情况,使用.hidden会产生比你想象的更多的含义。如果在加载视图后在方法中调用它,则需要使用约束而不是隐藏。有些人创建约束出口并将它们设置为活动以隐藏事物。有些人设置alpha并将子视图放在前面以隐藏内容等。
我相信这是首选方式: http://candycode.io/hiding-views-with-auto-layout/
这是一个堆栈溢出线程,其中包含大量有关使用AutoLayout隐藏内容的最佳选项的信息: AutoLayout with hidden UIViews?
答案 1 :(得分:0)
您应该在主线程上的委托方法中隐藏或显示任何控件。
像这样使用
DispatchQueue.main.async {
splash_view_not?.hidden = false
}