我只是遇到了一个关于a的行为的非常奇怪的问题UICollectionView,我认为集合视图和我都非常困惑。
我在项目中实现了一个具有水平滚动方向的特定收集视图,不久之后,质量保证发布了一个错误通知,指出在某些设备上收集视图项之间的间距不正确。我进一步检查了该错误,并意识到问题不仅在特定设备上仍然存在,而且在运行iOS 9的所有设备上仍然存在。在iOS 10上,一切正常。
因此,我创建了一个简单的示例项目来隔离可以在GitHub上找到的潜在问题:
首先,我对示例项目没有显示iOS 9错误感到更加困惑。但是,一旦我将其设置为estimatedItemSize非零值以使用自动调整大小的单元格(即“自动布局”),就会再次出现相同的不正确间距。
我发现只有在以下特定情况下(iOS 9 +estimatedItemSize != .zero),集合视图才会使,minimumLineSpacing和混淆minimumInteritemSpacing,至少在实现各自的流布局委托函数时:
collectionView(_:layout:minimumLineSpacingForSectionAt:)
collectionView(_:layout:minimumInteritemSpacingForSectionAt:)
因此,无论何时要指定这些间距之一,都必须实现另一个间距。
对我来说,这似乎是一个严重的系统错误,但这是一件大事,我无法相信没有其他人会遇到此问题。因此,我更有可能在代码中或在理解这些间距的工作方式时犯了一些错误(尽管在Apple Docs中已经很清楚地描述了上面链接的委托方法)。
示例项目中的“使用自动布局”开关在(禁用)和(启用)estimatedItemSize之间切换。.zeroCGSize(width: 100, height: 50)
我有一个UIAlertView.当用户点击警报视图中的按钮时,我想显示一个新按钮UIViewController.
为了实现这一点,我需要知道哪个视图控制器当前在屏幕上可见,因为该特定视图控制器是呈现新视图控制器的正确视图控制器.
问题是我的应用程序中有一个复杂的视图控制器层次结构,包括a UINavigationController和a UITabBarController(以及其他).所以我不能简单地self.visibleViewController用来获取当前可见的视图控制器.
我已经在Stackoverflow上找到了一个可能的解决方案,但我想找到一个更简洁的解决方案而无需挖掘整个视图控制器堆栈.
我想删除会话变量或在JSTL中将其设置为null。请帮我。如果我尝试使用
<c:set var="varialbleName" value=null scope="session" />
Run Code Online (Sandbox Code Playgroud)
但这给了我以下服务器错误。
Server Error
Caused by:
org.apache.jasper.JasperException: /WEB-INF/jsps/forum.jsp (line: 78, column: 71) quote symbol expected
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:276)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:92)
at org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:223)
at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:163)
at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:154)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1231)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1453)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1666)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:996)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1271)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1453)
at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
Run Code Online (Sandbox Code Playgroud) 目前,我正在通过JSON进行通讯的主应用程序上构建应用程序扩展。主题和数据位于JSON中,并通过Apple的可编码协议进行解析。我现在遇到的问题是使NSAttributedString可编码兼容。我知道它不是内置的,但我知道它可以转换为数据并返回到nsattributedstring。
将NSAttributedString强制转换为数据以便通过JSON共享。
if let attributedText = something.attributedText {
do {
let htmlData = try attributedText.data(from: NSRange(location: 0, length: attributedText.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType])
let htmlString = String(data: htmlData, encoding: .utf8) ?? ""
} catch {
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
将html JSON字符串转换回NSAttributedString:
do {
return try NSAttributedString(data: self, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch {
print("error:", error)
return nil
}
Run Code Online (Sandbox Code Playgroud)
如何制作一个具有nsAttributedTitle属性的结构,该属性的类型为NSAttributedString,并使其与自定义编码器解码器兼容?
结构示例(无需考虑可编码合规性):
struct attributedTitle: Codable {
var title: NSAttributedString
enum CodingKeys: String, CodingKey {
case …Run Code Online (Sandbox Code Playgroud) mono在我的iPhone应用程序中,我使用AAC(m4a容器)录制音频文件AVAudioRecorder,即我明确设置
[recordSettings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
Run Code Online (Sandbox Code Playgroud)
当在Audacity等音频编辑器中打开这些文件时,它们仅按预期显示一个通道。但是,有许多流行的音频播放器(例如VLC或foobar2000)将文件解释为stereo. 例如,当我Media Information... > Codec Details在 VLC 中显示时,它看起来像这样:

有趣的是,用iPhone 上的Apple语音备忘录应用程序录制的文件也显示出相同的行为。它们似乎是stereo多个音频播放器中的文件,但当我在 Audacity 中打开它们时,发现它们只有一个通道。
我不敢相信所有那些知名的媒体播放器都有缺陷。那么有没有什么方法可以告诉您AVAudioRecorder以某种方式设置频道编号,以便所有主要媒体播放器都可以正确检测到它?
我有一个标签栏控制器,它有两个项目连接到两个视图控制器(比如A和B)现在我想添加一个第三视图控制器(比如说C).但我不想在标签视图中添加第三个图标.当用户选择第二个图标时,它应该呈现B或C,具体取决于用户是否已登录.
我有一个LazyVGrid里面的NavigationView。
NavigationView {
ScrollView {
LazyVGrid(columns: columns) {
ForEach(items) { item in
NavigationLink(tag: item, selection: $displayedItem) {
DetailView(item)
} label: {
GridItemView(item)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用的变量在视图上定义如下:
@State var displayedItem: Item?
let columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
Run Code Online (Sandbox Code Playgroud)
现在我想显示特定项目的详细视图。我通过简单地将此项分配给displayedItem属性来做到这一点:
func showDetailView(for item: Item) {
displayedItem = item
}
Run Code Online (Sandbox Code Playgroud)
LazyVGrid当我调用此函数时相应项目可见时,这非常有效。但是,当该项目不可见时,我首先需要滚动到该项目才能NavigationLink触发。我知道为什么会发生这种情况(因为项目是延迟加载的,毕竟它是一个惰性LazyVGrid网格),但我不知道如何在需要时加载特定项目。
我还尝试通过将整个内容包装ScrollView在 a 内ScrollViewReader并附加以下修饰符以编程方式滚动到目标项目:
.onChange(of: displayedItem) { item in
if let item = …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的视图,仅显示 a Text、 aShape和 aButton垂直堆叠在 a 中ScrollView。是Shapea且仅当是Capsule时才会有条件地显示。showCapsuletrue
struct ContentView: View {\n\n @State var showCapsule = true\n\n var body: some View {\n ScrollView {\n VStack(spacing: 16) {\n Text("Why, oh why? ")\n .font(.headline)\n if showCapsule {\n Capsule()\n .frame(maxWidth: .infinity)\n .frame(height: 100)\n .foregroundColor(.blue)\n }\n Button {\n showCapsule.toggle()\n } label: {\n Text(showCapsule ? "Hide" : "Show")\n }\n .buttonStyle(.bordered)\n }\n .frame(maxWidth: .infinity)\n .padding()\n }\n .animation(.default, value: showCapsule)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n